我想渲染一个 ggplot2 风格的填充网格,一个 la (来源:had.co.nz)
我还没有找到任何以这种方式处理网格样式的在线资源。我是否必须求助于绘制自己的矩形补丁?
编辑:在尝试了 Chris 的解决方案之后,我编写了一个脚本来帮助使 matplotlib 图形看起来像 ggplot2,如果有人感兴趣的话。
我想渲染一个 ggplot2 风格的填充网格,一个 la (来源:had.co.nz)
我还没有找到任何以这种方式处理网格样式的在线资源。我是否必须求助于绘制自己的矩形补丁?
编辑:在尝试了 Chris 的解决方案之后,我编写了一个脚本来帮助使 matplotlib 图形看起来像 ggplot2,如果有人感兴趣的话。
以下代码用于matplotlib.pyplot.grid
打开网格并设置网格属性(线条颜色、样式和宽度),然后用于plt.gca().patch.set_facecolor('0.8')
更改轴颜色(我不确定是否有,但必须有方便的功能才能做到这一点) . 的参数patch.set_facecolor
是任何matplotlib 颜色。
import numpy
import matplotlib.pyplot as plt
x = numpy.random.rand(10)
x = numpy.random.rand(10)
plt.plot(x, y, 'o')
plt.grid(True, color='w', linestyle='-', linewidth=2)
plt.gca().patch.set_facecolor('0.8')
plt.show()
结果是
如果您只想更新单个图表的网格背景,您可以这样做:
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.set_facecolor('#EBEBEB')
# Plot something..
但是如果你想要所有图表的完整 ggplot 样式,Matplotlib 带有一个ggplot
主题,所以最简单的方法是启用它:
from matplotlib import pyplot as plt
plt.style.use('ggplot')
Seaborn 也有类似的主题:
import seaborn as sns
sns.set_style('darkgrid')
最后,rcParams
如果您愿意,还可以手动设置:
from matplotlib import pyplot as plt
from matplotlib.ticker import AutoMinorLocator
import numpy as np
# This isn't a full styling but gets you most of the way.
ggplot_styles = {
'axes.edgecolor': 'white',
'axes.facecolor': 'EBEBEB',
'axes.grid': True,
'axes.grid.which': 'both',
'axes.spines.left': False,
'axes.spines.right': False,
'axes.spines.top': False,
'axes.spines.bottom': False,
'font.size': 12,
'grid.color': 'white',
'grid.linewidth': '1.4',
'xtick.color': '555555',
'xtick.major.bottom': True,
'xtick.minor.bottom': False,
'ytick.color': '555555',
'ytick.major.left': True,
'ytick.minor.left': False,
}
plt.rcParams.update(ggplot_styles)
# Plot an example chart.
fig, ax = plt.subplots(figsize=(9, 6))
x = np.linspace(0, 14, 100)
for i in range(1, 7):
ax.plot(x, np.sin(x + i * .5) * (7 - i))
# Set minor ticks/gridline cadence.
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(2))
# Turn minor gridlines on and make them thinner.
ax.grid(which='minor', linewidth=0.5)