2017-10-02 4 views
2

matplotlibでヒストグラムをプロットしようとしていて、個々のバーの間に少しのスペースがあります。したがって、rwidth=0.9と設定しました。これが出力されます。Matplotlibヒストグラム:rwidthを0.9に設定するとグリッチが発生する

enter image description here

はグリッチを回避する方法はありますか?

enter image description here

私はmatplotlibのバージョン2.0.2を使用しています:rwidthために低い値を設定すると、しかし、まだスペースの幅に見える違いがあり、すべてのバーが分離されることが保証されます。ここではそれが助け場合pip freezeです:

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 

すべてのヘルプは高く評価され、感謝!

ルーカス

+0

https://stackoverflow.com/questions/25394913/spacing-between-bars-in-matplotlib-hist-with-thousands-of-bins – Dadep

答えて

2

私はこの動作は、バージョン2.0でmatplotlibのために導入されたと思います(少なくとも私はこれは、以前のバージョンでは、今のように悪いことを覚えてすることはできませんが、私はここで間違っている可能性があります)、もう1つは、それがあることを検討することもできバグ。バグはissue trackerに報告できます。もちろん、最適解が存在しない場合(すなわち、バーが非常に薄い場合)の場合がある。

問題に対処する方法については、次の点を考慮してください。

  • まず、原因使用中のベクトル形式に、PDFにエクスポートされるFigureが等しくないバー幅の問題を持っていないことに注意してください。したがって、刊行物などでは、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イメージを作成することができます。私。200を超える何かにdpiを変更することは、すでにあなたに必要な出力

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

    あなたはまた、より高い値

    plt.rcParams["figure.dpi"] = 288 
    
    にフィギュアのためのDPIを設定することがJupyterのノートブックでの作業与えるかもしれません

    すべての数字または

    plt.figure(dpi=288) 
    
    つの図形に対して

    欠点は、図が大きくなり過ぎることです。

  • 上記巨大画像を回避するには、代わりに実際の図形を表示する、heigh 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()) 
    

    enter image description here

0

Histogramに連続バーとの間に隙間があってはならない:「隣接ビンが元の変数が連続的であることを示すために、ヒストグラムタッチの矩形が互いに、全くギャップを残さないように4]。 "

私はそれがmatplotlibグリッチだとは思わない。ビンの数を減らすか、グラフのサイズを大きくすると、バーの間にギャップが表示されます。おそらくブラウザがヒストグラムをどのようにレンダリングするかに依存するからです。

ヒストグラムのサイズを設定するには、figsizeを設定する必要があります。図の幅と高さをインチで表​​します。

plt.figure(figsize=(12, 5)) 
plt.hist(x, bins=50, normed=True, rwidth=0.9); 
関連する問題