Matplotlib 如何在Seaborn + Pandas的二次y轴绘制时去除网格线

在数据可视化中,Matplotlib是一个非常强大的库,它不仅可以绘制简单的图表,还可以绘制高度定制化的图形。Seaborn是建立在Matplotlib之上的一个专业的数据可视化库,使我们能够构建有吸引力的图表和图形。这两个库的组合非常常见,但在使用二次y轴绘制时,相应的网格线会一起绘制在图上,这时候如何去除网格线呢?下面将给出解决方案。

阅读更多:Matplotlib 教程

理解二次y轴

二次y轴是指在同一图表中,另一个y轴被添加到右侧,使你可以在同一图表中绘制两个y轴的数据,如下所示:

import numpy as np

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

y1 = x

y2 = x * 10

ax1.plot(x, y1, 'g-')

ax1.set_xlabel('X axis')

ax1.set_ylabel('Y1 axis', color='g')

ax2 = ax1.twinx()

ax2.plot(x, y2, 'b-')

ax2.set_ylabel('Y2 axis', color='b')

plt.show()

二次y轴的添加方法主要是 ax2 = ax1.twinx(), 将 ax2 添加到 ax1 的右侧。

使用Seaborn绘制二次y轴图形

为了在二次y轴图表中去除网格线,我们首先需要使用Seaborn和Pandas准备我们的数据。下面是一个简单的例子:

import seaborn as sns

import pandas as pd

df = pd.DataFrame({'x': [0, 1, 2, 3, 4],

'y1': [0, 2, 4, 6, 8],

'y2': [0, 20, 40, 60, 80]})

sns.set_style("whitegrid")

fig, ax1 = plt.subplots()

sns.lineplot(data=df, x='x', y='y1', ax=ax1, color='green')

ax1.set_xlabel('X axis')

ax1.set_ylabel('Y1 axis', color='g')

ax2 = ax1.twinx()

sns.lineplot(data=df, x='x', y='y2', ax=ax2, color='blue')

ax2.set_ylabel('Y2 axis', color='b')

plt.show()

虽然我们没有明确地添加网格线,但是它们还是会在图表中出现。下面我们一起看看如何去除它们。

去除网格线

我们可以使用 ax.grid(False) 方法轻松地去掉全部网格线。对于特定的轴可以使用 which='major'(去除主要网格线) 或 which='minor'(去除次要网格线)的参数,而不是全部网格线。让我们来看看如何在上面的例子中去掉全部网格线:

import seaborn as sns

import pandas as pd

df = pd.DataFrame({'x': [0, 1, 2, 3, 4],

'y1': [0, 2, 4, 6, 8],

'y2': [0, 20, 40, 60, 80]})

sns.set_style("whitegrid")

fig, ax1 = plt.subplots()

sns.lineplot(data=df, x='x', y='y1', ax=ax1, color='green')

ax1.set_xlabel('X axis')

ax1.set_ylabel('Y1 axis', color='g')

ax1.grid(False)

ax2 = ax1.twinx()

sns.lineplot(data=df, x='x', y='y2', ax=ax2, color='blue')

ax2.set_ylabel('Y2 axis', color='b')

ax2.grid(False)

plt.show()

使用 ax1.grid(False) 和 ax2.grid(False) 方法分别去除主要网格线。

总结

本文介绍了如何在使用Seaborn和Pandas绘制二次y轴图表时去除网格线。我们首先了解了二次y轴的概念,然后演示了如何使用Seaborn绘制二次y轴图形,最后介绍了如何去除网格线。当然,本文只是提供了基本的解决方案,您可以根据个人需求进行进一步的定制化。