我正在使用以下代码绘制一些数据均值和方差的变化。
这个代码是完全正常的:
但现在我想把这个可视化图表垂直地放置,作为另一个图表旁边的高级色条。我希望能够旋转整个坐标轴及其所有内容,
但我只找到了这个问题,它也没有一个确定的答案。因此,我尝试自己做如下操作:
这几乎可以解决问题(请注意,分散的点不再沿着白线摆动,并且没有按预期旋转)。遗憾的是,持有scatter结果的PathCollection并未按预期运作。尝试了一些方法后,我发现scatter具有某种偏移变换,这似乎相当于其他集合中的常规变换。
似乎我需要改变散点图的偏移变换,但是我没有找到任何允许我更改
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
这个代码是完全正常的:
![enter image description here](https://istack.dev59.com/QLpIH.webp)
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])
这几乎可以解决问题(请注意,分散的点不再沿着白线摆动,并且没有按预期旋转)。遗憾的是,持有scatter结果的PathCollection并未按预期运作。尝试了一些方法后,我发现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
上该变换的方法。而且,这将使我实际想要做的事情变得更加不方便。请问是否有可能改变偏移变换呢?谢谢!
imshow
,scatter
和plot
可以直接使用,您可以使用ax.fill_betweenx
进行着色。(PS:着色的好技巧) - VBB