Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib直方图:将rwidth设置为0.9时出现故障_Python_Matplotlib_Histogram - Fatal编程技术网

Python Matplotlib直方图:将rwidth设置为0.9时出现故障

Python Matplotlib直方图:将rwidth设置为0.9时出现故障,python,matplotlib,histogram,Python,Matplotlib,Histogram,我试图用matplotlib绘制一个柱状图,并在各个条之间留出一点空间。因此,我设置了rwidth=0.9。这是输出: 有没有办法避免这个小故障?为rwidth设置较低的值可确保所有条分开,但空间的宽度仍存在明显差异: 我使用的是matplotlib版本2.0.2。下面是一个pip冻结,如果有帮助的话: appdirs==1.4.3 bleach==2.0.0 bokeh==0.12.9 callcatcher==1.2.0 certifi==2017.7.27.1 chardet==3.0

我试图用matplotlib绘制一个柱状图,并在各个条之间留出一点空间。因此,我设置了
rwidth=0.9
。这是输出:

有没有办法避免这个小故障?为
rwidth
设置较低的值可确保所有条分开,但空间的宽度仍存在明显差异:

我使用的是matplotlib版本2.0.2。下面是一个
pip冻结
,如果有帮助的话:

appdirs==1.4.3
bleach==2.0.0
bokeh==0.12.9
callcatcher==1.2.0
certifi==2017.7.27.1
chardet==3.0.4
cycler==0.10.0
decorator==4.1.2
entrypoints==0.2.3
graphviz==0.8
holoviews==1.8.4
html5lib==0.999999999
idna==2.6
ipykernel==4.6.1
ipython==6.2.0
ipython-genutils==0.2.0
ipywidgets==7.0.1
jedi==0.11.0
Jinja2==2.9.6
jsonschema==2.6.0
jupyter==1.0.0
jupyter-client==5.1.0
jupyter-console==5.2.0
jupyter-core==4.3.0
MarkupSafe==1.0
matplotlib==2.0.2
mistune==0.7.4
nbconvert==5.3.1
nbformat==4.4.0
notebook==5.1.0
numpy==1.13.2
packaging==16.8
pandas==0.20.3
pandocfilters==1.4.2
param==1.5.1
parso==0.1.0
pexpect==4.2.1
pickleshare==0.7.4
pkg-resources==0.0.0
prompt-toolkit==1.0.15
ptyprocess==0.5.2
Pygments==2.2.0
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.2
PyYAML==3.12
pyzmq==16.0.2
qtconsole==4.3.1
requests==2.18.4
scipy==0.19.1
seaborn==0.8.1
simplegeneric==0.8.1
six==1.11.0
terminado==0.6
testpath==0.3.1
tornado==4.5.2
traitlets==4.3.2
urllib3==1.22
wcwidth==0.1.7
webencodings==0.5.1
widgetsnbextension==3.0.3
xonsh==0.3.2
感谢您的帮助,谢谢


Lukas

a上的连续条之间应该没有间隙:“由于相邻的箱子没有间隙,直方图的矩形相互接触,表明原始变量是连续的。[]

我不认为这是matplotlib的小故障。尝试减少箱子的数量或增加图表的大小,您可能会看到条形图之间的间隙。我这么说可能是因为它将取决于浏览器如何呈现直方图

要设置直方图的大小,必须设置
figsize
;图形的宽度和高度(以英寸为单位)

plt.figure(figsize=(12, 5))
plt.hist(x, bins=50, normed=True, rwidth=0.9);

我认为这个行为是用第2版引入MatpTrLIB(至少我不记得这和以前版本一样糟糕,但我可能错了),人们可以认为它是一个bug。错误可以在以下位置报告:。当然,在某些情况下,不可能存在最佳解决方案(即,如果钢筋非常薄)

以下是如何处理这个问题的一些考虑

  • 首先,请注意,由于使用的是矢量格式,导出为pdf的图形不存在条宽不相等的问题。所以对于出版物或类似的,使用PDF绝对是一个可以考虑的选项。
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.random.randn(5000)
    plt.hist(x,bins=50, rwidth=0.9)
    
    plt.savefig(__file__+".pdf")
    
  • 由于pdf工作正常,您可以将pdf转换为png,例如通过imagemagick

    > convert -density 300 -trim test.pdf test.png
    
  • 您可以创建分辨率更高的png图像。也就是说,将
    dpi
    更改为200以上可能已经为您提供了所需的输出

    plt.savefig(__file__+".pdf", dpi=288)
    

  • 在Jupyter笔记本中工作时,您还可以将数字的dpi设置为更高的值

    plt.rcParams["figure.dpi"] = 288
    
    对于所有数字或

    plt.figure(dpi=288)
    
    对于单个数字。缺点可能是该数字太大。

  • 为了避免上面的巨大图像,您可以显示高dpi的图形,而不是显示实际图形,但将输出的宽度设置为较小的值。这有点乏味,但当然可以复制粘贴下面的函数以供重用

    import numpy as np
    import matplotlib.pyplot as plt
    from IPython.display import Image, display
    import io
    
    def display_figure(fig=None):
        if not fig: fig=plt.gcf();
        buff = io.BytesIO()
        fig.savefig(buff, dpi=288)
        buff.seek(0)
        display(Image(data=buff.getvalue(), width=480))
    
    x = np.random.randn(5000);
    plt.hist(x,bins=50, rwidth=0.9);
    display_figure(plt.gcf())