使用Matplotlib我想删除图中的网格线,同时保持框架(即轴线)。我已经尝试了下面的代码和其他选项,但我无法让它工作。如何在移除网格线时简单地保留框架?
我这样做是为了在matplotlib中重现一个ggplot2图。我在下面创建了一个MWE。请注意,您需要一个相对较新版本的matplotlib才能使用ggplot2样式。
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')
答案 0 :(得分:4)
好的,我认为这就是你要问的问题(如果我误解了,请纠正我):
您需要更改spines
的颜色。您需要使用set_color
方法单独为每个spine
执行此操作:
for spine in ['left','right','top','bottom']:
ax1.spines[spine].set_color('k')
有关使用spines
的详情,请参阅this example和this example。
但是,如果你删除了灰色背景和网格线,并添加了刺,那么这不再是ggplot
风格了;那真的是你想要用的风格吗?
修改强>
要使直方图条的边缘触及框架,您需要:
更改分档,因此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
如果您真的希望保持箱位于values.min()
和values.max()
之间,则需要将地块限制更改为不再为0和1:
n,bins,patches = plt.hist(values, bins=20, weights=weights)
ax.set_xlim(bins[0],bins[-1])