Преобразовать целые оси (или диаграмму рассеяния) в matplotlibPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразовать целые оси (или диаграмму рассеяния) в matplotlib

Сообщение Anonymous »

Я рисую график изменений среднего значения и дисперсии некоторых данных с помощью следующего кода

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

import matplotlib.pyplot as pyplot
import numpy

vis_mv(data, ax = None):
if ax is None: ax = pyplot.gca()
cmap = pyplot.get_cmap()
colors = cmap(numpy.linspace(0, 1, len(data)))

xs = numpy.arange(len(data)) + 1
means = numpy.array([ numpy.mean(x) for x in data ])
varis = numpy.array([ numpy.var(x) for x in data ])
vlim = max(1, numpy.amax(varis))

# variance
ax.imshow([[0.,1.],[0.,1.]],
cmap = cmap, interpolation = 'bicubic',
extent = (1, len(data), -vlim, vlim), aspect = 'auto'
)
ax.fill_between(xs, -vlim, -varis, color = 'white')
ax.fill_between(xs, varis, vlim, color = 'white')

# mean
ax.plot(xs, means, color = 'white', zorder = 1)
ax.scatter(xs, means, color = colors, edgecolor = 'white', zorder = 2)

return ax
Это прекрасно работает:
Изображение
но теперь я хотел бы иметь возможность использовать эту визуализацию также и вертикально, как своего рода расширенную цветовую полосу рядом с другим сюжетом. Я надеялся, что можно будет повернуть всю ось со всем ее содержимым,
но смог найти только этот вопрос, на который пока тоже нет однозначного ответа. Поэтому я попробовал сделать это сам следующим образом:

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

from matplotlib.transforms import Affine2D

ax = vis_mv()
r = Affine2D().rotate_deg(90) + ax.transData

for x in ax.images + ax.lines + ax.collections:
x.set_transform(r)

old = ax.axis()
ax.axis(old[2:4] + old[0:2])
Это почти помогает (обратите внимание, как разбросанные точки, которые раньше лежали вдоль белой линии, раздуваются и не поворачиваются, как ожидалось).
Изображение
К сожалению, PathCollection содержит результат разброса< /code>ing работает не так, как ожидалось. Попробовав некоторые вещи, я обнаружил, что в scatter есть своего рода преобразование смещения, которое, похоже, является эквивалентом обычного преобразования в других коллекциях.

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

x = numpy.arange(5)
ax = pyplot.gca()
p0, = ax.plot(x)
p1 = ax.scatter(x,x)

ax.transData == p0.get_transform()           # True
ax.transData == p1.get_offset_transform()    # True
Похоже, что вместо этого я бы хотел изменить преобразование смещения для диаграммы рассеяния, но мне не удалось найти какой-либо метод, который позволил бы мне изменить это преобразование в PathCollection >. Кроме того, было бы намного сложнее делать то, что я на самом деле хочу.
Кто-нибудь знает, существует ли возможность изменить преобразование смещения?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Я не могу анимировать диаграмму рассеяния в matplotlib. Каждый кадр представляет собой повторение графика данных первого
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Построить диаграмму рассеяния волн
    Гость » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Гость
  • Как я могу визуализировать диаграмму рассеяния в Python с осью «двойного логарифма»?
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как создать такую ​​диаграмму рассеяния с помощью Plotly?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как сделать диаграмму рассеяния с пустыми кругами в Python?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

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