0

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

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

在此处输入图像描述

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

示例代码来自这里

 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()
4

1 回答 1

1

颜色条称为键图,它是密度样式的属性。您可以将其设置为无,即

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

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

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

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

在第一个图中,我们可以保留 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))

这确保了 keygraph 中的比例相同,因此颜色相同。:-)

于 2020-09-28T11:42:20.260 回答