这是一个生成情节的最小例子,它说明了我的问题:
import matplotlib.pylab as plt
import matplotlib.mpl as mpl
import numpy as np
import random
data = [[random.random() for i in range(10)] for j in range(10)]
[XT, YT] = np.meshgrid(np.arange(1,10+1,1), np.arange(1,10+1,1))
cmap = mpl.cm.gray
fig, ax = plt.subplots()
CS = ax.contour(XT, YT, data,levels=np.arange(0,1+0.1,0.1),\
cmap=cmap,linewidths=0.75)
CB = plt.colorbar(CS, ticks=np.arange(0,1+0.1,0.1))
plt.show()
结果图如下:
我想保留linewidths
中图中轮廓线的0.75
,但在colorbar
中增加它们(为了更好的可读性)。
如何更改linewidths
中的colorbar
而不更改它们?
我最初尝试CB.collections
,但colorbar
没有collections
。此外,使用参数colorbar
调用linewidths=4.0
不起作用(它是一个未知参数)。
注释
在输入这个问题时,我有了这个想法(rubber duck debugging):
CS = ax.contour(XT, YT, data,levels=np.arange(0,1+0.1,0.1),\
cmap=cmap,linewidths=4.0)
CB = plt.colorbar(CS, ticks=np.arange(0,1+0.1,0.1))
plt.setp(CS.collections , linewidth=0.75)
基本上,将初始linewidths
设置为colorbar
的所需级别,然后生成colorbar
,之后使用原始等高线上的collections
来减少他们的线宽。
这有效。
但是:有没有办法直接控制linewidths
中的colorbar
?
答案 0 :(得分:2)
您只需要了解如何访问这些行,请尝试:
>>> CB.ax.get_children()
[<matplotlib.axis.XAxis object at 0x026A74B0>, <matplotlib.axis.YAxis object at 0x026AF270>, <matplotlib.lines.Line2D object at 0x026AF190>, <matplotlib.patches.Polygon object at 0x027387F0>, <matplotlib.collections.LineCollection object at 0x02748BD0>, <matplotlib.text.Text object at 0x026C0D10>, <matplotlib.patches.Rectangle object at 0x026C0D50>, <matplotlib.spines.Spine object at 0x026A7410>, <matplotlib.spines.Spine object at 0x026A7290>, <matplotlib.spines.Spine object at 0x026A7350>, <matplotlib.spines.Spine object at 0x026A71B0>]
好吧,猜猜看,我打赌第5项是分隔线的列表。我们正在寻找一些.line
个对象,其中有两个。第一个(第3个项目)实际上是整个颜色条的边缘(如果我没记错的话)。所以我会选择下一个.line
对象。
现在让我们尝试以几种方式对其进行修改:
>>> len(lines1[4].get_linewidths())
11 #how many item are there? 11 lines
>>> lines1[4].set_color(['r']*11) #set them all to red, in this example we actually want to have the color stay the same, this is just for a demonstration.
>>> lines1[4].set_linewidths([2]*11) #set them all to have linewidth of 2.
结果
答案 1 :(得分:0)
使用Axes.tick_params
。
当您使用CB
作为颜色栏的句柄时,可以通过以下方式设置颜色栏中的线宽:
CB.ax.tick_params(size = your_size, width = your_width)
size
是颜色栏中刻度线的长度。 width
是线宽。