Matplotlib中的直方图、图形和线条样式

10

我需要在同一张图中绘制两个直方图,它们会有重叠。我使用的命令类似于:

plt.hist(data1,bins=40,normed=True,histtype='step')
plt.hist(data2,bins=40,normed=True,histtype='step')
为了区分这两个不同的直方图(需要以黑白形式呈现),我想让其中一个以虚线而不是实线显示,因此我尝试了以下内容:

为了区分这两个不同的直方图(需要以黑白形式呈现),我想让其中一个以虚线而不是实线显示,所以我尝试了

plt.hist(data1,bins=40,normed=True,histtype='step',ls='--')

这让我收到了以下错误信息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/__init__.py", line 1475, in __call__
    return self.func(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/__init__.py", line 534, in callit
    func(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/backends/backend_tkagg.py", line 363, in idle_draw
    self.draw()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/backends/backend_tkagg.py", line 348, in draw
    FigureCanvasAgg.draw(self)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/backends/backend_agg.py", line 451, in draw
    self.figure.draw(self.renderer)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/figure.py", line 1035, in draw
    func(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/axes.py", line 2088, in draw
    a.draw(renderer)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/patches.py", line 401, in draw
    gc.set_linestyle(self._linestyle)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/matplotlib/backend_bases.py", line 962, in set_linestyle
    raise ValueError('Unrecognized linestyle: %s' % str(style))
ValueError: Unrecognized linestyle: --

我的问题是,我如何更改线条样式(实线/虚线和颜色)?或者有没有其他的方法来绘制这两个直方图并使其具有所需的线条样式?

2个回答

16

你是否导入了所需的所有库?此外,有时并非所有的线型都适用于所有的图表类型。例如,有些线型适用于绘图而不适用于向量(尽管它们看起来应该适用),当符号名称“--”无法使用时,尝试使用命名版本“dashed”是个好主意。

您可以在plot参数中提供一个线型元组(或颜色、宽度等),就像这个matplotlib文档示例中对linewidths的处理方式一样(使用Ctrl+F查找)。

使用您的绘图命令,它应该类似于:

plt.hist(data1,bins=40,normed=True,histtype='step',linestyle=('solid','dashed'))

你可以像设置linestyle一样,指定一个color参数。当把线图绘制出来时,pyplot会查看你提供的每个元组中的第一个项目。因此,如果你想要一条实线黑色线和一条虚线黄色线,代码应该是这样的:

plt.hist(data1,bins=40,normed=True,histtype='step',linestyle=('solid','dashed'),color=('black','k'))

因此,“solid”应与“black”配对,“dashed”应与“k”配对。这适用于您想要使用的任何其他线条属性。


1
设置 linestyle=('dashed') 是可以生效的。由于你提到了颜色,我怎么才能以这种方式设置颜色呢?我尝试过 linestyle=('dashed','black')linestyle=('dashed','k') 但它们并不起作用。 - wdg
尝试在这里进行注释,决定更新答案。 - gfritz
我认为你可以更好地组织你的回答(比如为data1data2编写单独的命令),但无论如何我还是接受了你的回答。 - wdg

2
edgecolor 参数在我的电脑上起作用了。
plot.hist (bins = 10, xlim = [0.0,1], ylim = [0.0,70], color = 'blue', edgecolor = 'black')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接