Как я могу построить график плотности с осями в логарифмическом масштабе в matplotlib?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу построить график плотности с осями в логарифмическом масштабе в matplotlib?

Сообщение Anonymous »

Я хочу построить график скалярной плотности как функции двух переменных x и y, которые потенциально можно масштабировать логарифмически. По сути, я запускаю моделирование для каждой пары x и y и хочу сообщить данные, используя красивую цветовую карту. Однако я столкнулся с проблемой: я не могу заставить imshow правильно масштабировать данные. Хотя pcolormesh работает надежно, он создает файлы, размер которых на несколько порядков больше, и их часто невозможно отобразить без артефактов (например, тонких белых линий между точками данных).
Вот код для воспроизвести проблему:

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import NonUniformImage

# calculate axis positions
x = np.geomspace(1, 100, 5)
dx = np.sqrt(x[1] / x[0])  # half the difference between points in logspace
y = np.linspace(0, 1, 3)
dy = (y[1] - y[0]) / 2  # half the difference between points in linspace
extent = (x[0] / dx, x[-1] * dx, y[0] - dy, y[-1] + dy)

# get some random image data to plot
z = np.random.uniform(size=(len(x), len(y)))
# create figure axes
fig, ax = plt.subplots(ncols=3, figsize=(12, 3))

# use imshow to plot array
ax[0].imshow(z.T, origin="lower", aspect="auto", extent=extent)
ax[0].set_xscale("log")
ax[0].set_title("imshow")

# use NonUniformImage to plot array
im = NonUniformImage(ax[1], extent=extent)
im.set_data(x, y, z.T)
ax[1].add_image(im)
ax[1].set_xscale("log")
ax[1].set_title("NonUniformImage")

# use pcolormesh to plot array
x2 = np.geomspace(*extent[:2], 6)
y2 = np.linspace(*extent[2:], 4)
ax[2].pcolormesh(x2, y2, z.T)
ax[2].set_title("pcolormesh")

# set axis scales
for i in range(3):
ax[i].set_xlim(*extent[:2])
ax[i].set_ylim(*extent[2:])
ax[i].set_xscale("log")

plt.show()
Выполнение этого примера приводит к следующему изображению
[img]https://i .sstatic.net/IYoJN2yW.png[/img]

Очевидно, что imshow искажает изображение, предположительно потому, что предполагает, что изображение содержит данные на линейно масштабированной оси. вторая панель показывает мою попытку использовать NonUniformImage, которая по какой-то причине делает все совершенно неправильно.
Третья панель показывает то, что я хочу видеть, хотя и с использованием pcolormesh, у которого есть серьезные недостатки Я упоминал выше.
По сути, я просто хочу показать «нормальное» изображение с прямоугольными пикселями одинакового размера на логарифмической оси. Я думаю, что это должно быть возможно, но мне не удалось этого добиться. Будем очень признательны за любую помощь!
Обратите внимание, что этот старый ответ не работает должным образом, поскольку он просто добавляет оси с логарифмическими отметками, поэтому пользователь не может надежно взаимодействовать с результатом (например, для измените галочки потом).

Подробнее здесь: https://stackoverflow.com/questions/792 ... matplotlib
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу построить график плотности с осями в логарифмическом масштабе в matplotlib?
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • График с двумя осями Y и двумя осями X
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • График с двумя осями Y и двумя осями X [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Угловой участок в логарифмическом масштабе
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Угловой участок в логарифмическом масштабе
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»