当我用颜色绘制时会出现错误,并且没有它也可以正常工作。我的线条颜色必须限制为2个定义的值。
这在Jupyter Notebook中有效
import random
xStart = random.sample(range(1, 10), 6)
xStart.sort()
xEnd = [x + random.randint(1, 6) for x in xStart]
yval = list(range(1, 7))
colours = ['r']*6
colours[1] = 'b'
print(xStart)
print(xEnd)
print(yval)
print(colours)
f, ax1 = plt.subplots(figsize=(6,4))
ax1.plot([xStart,xEnd], [yval,yval], '-', linewidth=1) #, color=colours)
plt.show()
这不起作用。 如果我取消对color参数的注释,则代码将引发(精心制作的)错误。虽然我可以画一个循环的每个线段并为每个红色或蓝色上色,但我认为它会比下面的代码慢。在这个玩具示例中,我有6条线,但实际上我有12,000条线,这花了几分钟,一次画一条线。
我认为错误与我的color参数的大小有关;它可能期望1(内部一次),而我提供的是6。
import random
xStart = random.sample(range(1, 10), 6)
xStart.sort()
xEnd = [x + random.randint(1, 6) for x in xStart]
yval = list(range(1, 7))
colours = ['r']*6
colours[1] = 'b'
print(xStart)
print(xEnd)
print(yval)
print(colours)
f, ax1 = plt.subplots(figsize=(6,4))
ax1.plot([xStart,xEnd], [yval,yval], '-', linewidth=1, color=colours) #--> Only change from above code
plt.show()
TypeError跟踪(最近的呼叫 最后)C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ colors.py to_rgba(c,alpha) 131尝试: -> 132 rgba = _colors_full_map.cache [c,alpha] 133(KeyError,TypeError)除外:#不在高速缓存中,或无法散列。
TypeError:不可散列的类型:“列表”
在处理上述异常期间,发生了另一个异常:
ValueError跟踪(最近的呼叫 最后)C:\ Anaconda3 \ lib \ site-packages \ IPython \ core \ formatters.py在 致电(自己,obj) 339通过 第340章 -> 341返回打印机(obj) 342#最后寻找特殊的方法名称 343方法= get_real_method(obj,self.print_method)
C:\ Anaconda3 \ lib \ site-packages \ IPython \ core \ pylabtools.py在 (图) 236 237 if'png'格式: -> 238 png_formatter.for_type(图,lambda图:print_figure(fig,'png',** kwargs)) 239如果格式为'retina'或格式为'png2x': 240 png_formatter.for_type(图,lambda图:retina_figure(fig,** kwargs))
C:\ Anaconda3 \ lib \ site-packages \ IPython \ core \ pylabtools.py在 print_figure(图,fmt,bbox_inches,** kwargs) 120 121 bytes_io = BytesIO() -> 122图.canvas.print_figure(bytes_io,** kw) 123数据= bytes_io.getvalue() 124如果fmt =='svg':
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backend_bases.py在 print_figure(自身,文件名,dpi,面部颜色,边缘颜色,方向, 格式,** kwargs)2214 direction = orientation, 2215 dryrun = True, -> 2216 ** kwargs)2217渲染器= self.figure._cachedRenderer 2218 bbox_inches = self.figure.get_tightbbox(renderer)
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backends \ backend_agg.py在 print_png(自己,filename_or_obj,* args,** kwargs) 505 506 def print_png(自己,filename_or_obj,* args,** kwargs): -> 507 FigureCanvasAgg.draw() 508渲染器= self.get_renderer() 509 original_dpi = renderer.dpi
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backends \ backend_agg.py在 画(个体经营) 428#如果工具栏: 第429章 -> 430 self.figure.draw(self.renderer) 最终431: 432#如果是工具栏:
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ artist.py在 draw_wrapper(艺术家,渲染器,* args,** kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(艺术家,渲染器,* args,** kwargs) 56最后: 57如果artist.get_agg_filter()不是None:
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ figure.py在draw(self, 渲染器)1297 1298
mimage._draw_list_compositing_images( -> 1299渲染器,自我,艺术家,self.suppressComposite)1300 1301
renderer.close_group('figure')C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ image.py在 _draw_list_compositing_images(渲染器,父级,艺术家,suppress_composite) 136如果not_composite或not has_images: 137 in艺术家: -> 138 a.draw(渲染器) 139其他: 140#将任何相邻的图像合成在一起
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ artist.py在 draw_wrapper(艺术家,渲染器,* args,** kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(艺术家,渲染器,* args,** kwargs) 56最后: 57如果artist.get_agg_filter()不是None:
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axes_base.py在draw(self, 渲染器,inframe)2435 renderer.stop_rasterizing()
2436 -> 2437 mimage._draw_list_compositing_images(渲染器,自我,艺术家)2438 2439 renderer.close_group('axes')C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ image.py在 _draw_list_compositing_images(渲染器,父级,艺术家,suppress_composite) 136如果not_composite或not has_images: 137 in艺术家: -> 138 a.draw(渲染器) 139其他: 140#将任何相邻的图像合成在一起
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ artist.py在 draw_wrapper(艺术家,渲染器,* args,** kwargs) 53 renderer.start_filter() 54 ---> 55 return draw(艺术家,渲染器,* args,** kwargs) 56最后: 57如果artist.get_agg_filter()不是None:
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ lines.py在draw(self, 渲染器) 765 self._set_gc_clip(gc) 766 -> 767 ln_color_rgba = self._get_rgba_ln_color() 768 gc.set_foreground(ln_color_rgba,isRGBA = True) 769 gc.set_alpha(ln_color_rgba [3])
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ lines.py在 _get_rgba_ln_color(self,alt)1267 1268 def _get_rgba_ln_color(self,alt = False): -> 1269 return mcolors.to_rgba(self._color,self._alpha)1270 1271#一些别名....
to_rgba中的C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ colors.py(c, α) 132 rgba = _colors_full_map.cache [c,alpha] 133除了(KeyError,TypeError):#不在缓存中,或不可哈希。 -> 134 rgba = _to_rgba_no_colorcycle(c,alpha) 135尝试: 136 _colors_full_map.cache [c,alpha] = rgba
C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ colors.py在 _to_rgba_no_colorcycle(c,alpha) 183#float)
and
np.array(...)。astype(float)将所有的“ 0.5”转换为0.5。 184#测试尺寸以拒绝单个浮标。 -> 185提高ValueError(“无效的RGBA参数:{!r}”。format(orig_c)) 186#返回一个元组,以防止修改缓存的值。 187 c =元组(c.astype(float))ValueError:无效的RGBA参数:['r','b','r','r','r','r']
答案 0 :(得分:0)
好的,感谢Bazingaa和这个线程How to get different colored lines for different plots in a single figure?
...最终代码如下。
由于我使用一个ax.plot()命令绘制了多条线,因此color参数将不可用。恕我直言,因为它在逻辑上是有道理的,应该是matplotlib的增强功能。尽管如此,这是Bazingaa指出的解决方案。
对于感兴趣的人来说,与在循环中绘制12K线相比,此代码的确比在循环中运行LOT更快(以便使用单独的ax.plot()命令一次绘制和上色它们)。
import random
xStart = random.sample(range(1, 10), 6)
xStart.sort()
xEnd = [x + random.randint(1, 6) for x in xStart]
yval = list(range(1, 7))
colours = ['r']*6
colours[1] = 'b'
f, ax1 = plt.subplots(figsize=(6,4))
ax1.plot([xStart,xEnd], [yval,yval], '-', linewidth=1) #, color=colours) #Leaving the color argument commented
#Add new code to colour after the fact
for idx,line in enumerate(ax1.lines):
line.set_color(colours[idx])
plt.show()