4

我有那些数据

        a       b       c       d       e
alpha   5.51    0.60    -0.12   26.90   76284.53
beta    3.39    0.94    -0.17   -0.20   -0.20
gamma   7.98    3.34    -1.41   7.74    28394.93
delta   2.29    1.24    0.40    0.29    0.28

我想做一个很好的可发布直方图,就像这个交错颜色条直方图

但是在 y 轴上有一个中断,所以我们可以计算出abcde的变化,这样数据就不会像这个一样被e列中的极值挤压,而是使用交错的颜色条直方图: 打破y轴

我想用python(matplotlib、pandas、numpy/scipy)或mathematica ...或任何其他开放和免费的高级语言(R、scilab、...)来做到这一点。谢谢你的帮助。

编辑:通过pandas使用matplotlib允许使用左下角“hspace”的选项按钮调整两个子图之间的空间。

4

1 回答 1

12

你见过这个例子吗?它用于 matplotlib 中损坏的 y 轴图。

希望这可以帮助。

与熊猫相结合,这给出了:

import pandas as pd
import matplotlib.pyplot as plt
from StringIO import StringIO

data = """\
        a       b       c       d       e
alpha   5.51    0.60    -0.12   26.90   76284.53
beta    3.39    0.94    -0.17   -0.20   -0.20
gamma   7.98    3.34    -1.41   7.74    28394.93
delta   2.29    1.24    0.40    0.29    0.28
"""

df = pd.read_csv(StringIO(data), sep='\s+')

f, axis = plt.subplots(2, 1, sharex=True)
df.plot(kind='bar', ax=axis[0])
df.plot(kind='bar', ax=axis[1])
axis[0].set_ylim(20000, 80000)
axis[1].set_ylim(-2, 30)
axis[1].legend().set_visible(False)

axis[0].spines['bottom'].set_visible(False)
axis[1].spines['top'].set_visible(False)
axis[0].xaxis.tick_top()
axis[0].tick_params(labeltop='off')
axis[1].xaxis.tick_bottom()
d = .015
kwargs = dict(transform=axis[0].transAxes, color='k', clip_on=False)
axis[0].plot((-d,+d),(-d,+d), **kwargs)
axis[0].plot((1-d,1+d),(-d,+d), **kwargs)
kwargs.update(transform=axis[1].transAxes)
axis[1].plot((-d,+d),(1-d,1+d), **kwargs)
axis[1].plot((1-d,1+d),(1-d,1+d), **kwargs)
plt.show()

在此处输入图像描述

于 2012-10-23T09:55:40.480 回答