Python Pyx:删除密度图中重复的颜色条

Python Pyx: remove repeated color bars in density plot

我想在一个 Python Pyx 图中有多个密度图。

我可以这样做以获得两个密度图:

问题:如何去除不必要的重复彩条?

示例代码来自here:

 from pyx import *
 f = canvas.canvas()
 re_min = -2
 re_max = 0.5
 im_min = -1.25
 im_max = 1.25
 gridx = 100
 gridy = 100
 max_iter = 10

 re_step = (re_max - re_min) / gridx
 im_step = (im_max - im_min) / gridy
 d = []


 for re_index in range(gridx):
 re = re_min + re_step * (re_index + 0.5)
for im_index in range(gridy):
    im = im_min + im_step * (im_index + 0.5)
    c = complex(re, im)
    n = 0
    z = complex(0, 0)
    while n < max_iter and abs(z) < 2:
        z = (z * z) + c
        n += 1
    d.append([re, im, n])

  g1 = graph.graphxy(height=8, width=8,
              x=graph.axis.linear(min=re_min, max=re_max, title=r"$\Re(c)$"),
              y=graph.axis.linear(min=im_min, max=im_max, title=r'$\Im(c)$'))
              
    g1.plot(graph.data.points(d, x=1, y=2, color=3, title="iterations"),
   [graph.style.density(gradient=color.rgbgradient.Rainbow)])
 f.insert(g1)
   
 g2 = graph.graphxy(height=8, width=8, xpos=g1.xpos+14.0,
              x=graph.axis.linear(min=re_min, max=re_max, title=r"$\Re(c)$"),
              y=graph.axis.linear(min=im_min, max=im_max, title=r'$\Im(c)$'))
              
 g2.plot(graph.data.points(d, x=1, y=2, color=3, title="iterations"),
   [graph.style.density(gradient=color.rgbgradient.Rainbow)])   
  f.insert(g2)     

     f.writePDFfile()

颜色条称为keygraph,是属性的密度样式。您可以将其设置为None,即

graph.style.density(gradient=color.rgbgradient.Rainbow, keygraph=None)

它不会在内部删除(自动)键图,但会抑制其输出。

你也可以自己设置keygraph,另外你还可以设置这个keygraph的coloraxis。它也是一种 属性 样式,默认情况下是一个简单的线性轴,但可以更改(如固定最小值和最大值)。

现在,当您抑制键图时,不确定两个图中是否会使用相同的轴(即使您共享相同的轴,只要您保持使用灵活的范围)。有各种各样的解决方案。让我举一个更高级的。 :-)

在第一个图表中,我们可以保留 plotitem 的副本,完成绘图(创建关键图),然后像这样访问色轴:

d1 = graph.style.density(gradient=color.rgbgradient.Rainbow)
plotitem = g1.plot(graph.data.points(d, x=1, y=2, color=3, title="iterations"), [d1])
f.insert(g1)
g1.finish()
coloraxis = plotitem.privatedatalist[-1].keygraph.axes['x']

现在您可以在第二个图表中使用此色轴,同时仍然抑制键图:

d2 = graph.style.density(gradient=color.rgbgradient.Rainbow, keygraph=None,
                         coloraxis=graph.axis.linkedaxis(coloraxis))

这可以确保键图中的比例相同,因此颜色也相同。 :-)