删除网格线,但保留框架(matplotlib中的ggplot2样式)

时间:2015-11-18 07:17:33

标签: python matplotlib

使用Matplotlib我想删除图中的网格线,同时保持框架(即轴线)。我已经尝试了下面的代码和其他选项,但我无法让它工作。如何在移除网格线时简单地保留框架?

我这样做是为了在matplotlib中重现一个ggplot2图。我在下面创建了一个MWE。请注意,您需要一个相对较新版本的matplotlib才能使用ggplot2样式。

enter image description here

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pylab as P
import numpy as np

if __name__ == '__main__':


    values = np.random.uniform(size=20)

    plt.style.use('ggplot')
    fig = plt.figure()
    _, ax1 = P.subplots()    

    weights = np.ones_like(values)/len(values)
    plt.hist(values, bins=20, weights=weights)
    ax1.set_xlabel('Value')
    ax1.set_ylabel('Probability')    

    ax1.grid(b=False)
    #ax1.yaxis.grid(False)
    #ax1.xaxis.grid(False)

    ax1.set_axis_bgcolor('white')    
    ax1.set_xlim([0,1])

    P.savefig('hist.pdf', bbox_inches='tight')

1 个答案:

答案 0 :(得分:4)

好的,我认为这就是你要问的问题(如果我误解了,请纠正我):

您需要更改spines的颜色。您需要使用set_color方法单独为每个spine执行此操作:

for spine in ['left','right','top','bottom']:
    ax1.spines[spine].set_color('k')

enter image description here

有关使用spines的详情,请参阅this examplethis example

但是,如果你删除了灰色背景和网格线,并添加了刺,那么这不再是ggplot风格了;那真的是你想要用的风格吗?

修改

要使直方图条的边缘触及框架,您需要:

  1. 更改分档,因此bin边缘变为0和1

    n,bins,patches = plt.hist(values, bins=np.linspace(0,1,21), weights=weights)
    # Check, by printing bins:
    print bins[0], bins[-1]
    # 0.0, 1.0
    

    enter image description here

  2. 如果您真的希望保持箱位于values.min()values.max()之间,则需要将地块限制更改为不再为0和1:

    n,bins,patches = plt.hist(values, bins=20, weights=weights)
    ax.set_xlim(bins[0],bins[-1])
    
  3. enter image description here