如何设置海洋点图的x轴范围?

时间:2019-04-12 03:03:34

标签: python matplotlib seaborn

我创建了pointplot(),但无法更改x轴限制。尽管我的数据仅包含9个月,但我想在轴上显示所有12个月。

fig,ax = plt.subplots(figsize=(12,4))
sns.pointplot(data=tr_df, x='Month', y='numOfTrips', hue='Year', ax=ax, palette='nipy_spectral')
# sns.plt.xlim(0, 12) # AttributeError: module 'seaborn' has no attribute 'plt'
# ax.set_xlim=(0, 12) # does nothing
ax.set(xlim=(0, 12))
ax.set(title="Number of trips each month")

enter image description here

我在做什么错了?

编辑:用于创建绘图的数据

    Year Month numOfTrips
0   2011   7     2608
1   2011   8     33579
2   2011   9     34756
3   2011   10    31423
4   2011   11    20746
5   2012   3     12240
6   2012   4     37637
7   2012   5     46056
8   2012   6     48315
9   2012   7     61659
10  2012   8     75443
11  2012   9     73012
12  2012   10    67372
13  2012   11    40862
14  2013   4     56625
15  2013   5     88105
16  2013   6     99301
17  2013   7     92504

3 个答案:

答案 0 :(得分:2)

恕我直言,seaborn的pointplot不是您想要的情节。

我建议您使用一个简单的lineplot,然后尝试按预期设置xlims:

fig,ax = plt.subplots(figsize=(12,4))
sns.lineplot(data=tr_df, x='Month', y='numOfTrips', hue='Year', ax=ax, palette='nipy_spectral')
ax.set(xlim=(0, 12))
ax.set(title="Number of trips each month")

导致

enter image description here

但是,我还建议在此上下文中将xticks设置为具有 12 值的某些列表,而0 ... 12具有 13 ...; -)

答案 1 :(得分:1)

这有点骇人听闻,但似乎可行。我认为问题在于pointplot忽略了轴的数值,并将其视为序数。 这段代码是一个手动替代:

fig,ax = plt.subplots(figsize=(12,4))
sns.pointplot(data=tr_df, x='Month', y='numOfTrips', hue='Year', ax=ax, palette='nipy_spectral')
ax.set_xticks(range(-3,10))
ax.set_xticklabels(range(12))
ax.set(title="Number of trips each month")

您基本上是在强迫绘图向左右添加更多刻度(使用负值),然后将所有标签重命名为1到12。

答案 2 :(得分:1)

看来问题在于您的数据仅在第3个月到第11个月之间变化。然后,月份索引从3开始,这对应于xmin

是一个使用一些随机数据(在添加数据之前生成的)显示此示例的示例
import seaborn as sns
import pandas as pd
import numpy as np

y = [2011,2012,2013]
years = []
months = []
trips = []
np.random.seed(0)
for ii in range(27):
    years.append(y[ii / 9])
    months.append(ii % 9+3)
    trips.append(np.random.randint(0,10)+(ii / 12)*10)

tr_df = pd.DataFrame({'Month':months, 'Trips':trips, 'Year':years})
fig,ax = plt.subplots(figsize=(12,4))
sns.pointplot(data=tr_df, x='Month', y='Trips', hue='Year', ax=ax, 
              palette='nipy_spectral', scale=0.7)
ax.set(xlim=(0, 12))
ax.set(title="Number of trips each month")
plt.show()

这将产生

enter image description here

解决此问题的最简单方法(尽管它不能解决基础数据,并且在所有情况下都无法使用)只是手动设置限制以解决偏移量-

ax.set(xlim=(-0.5, 8.5))

哪个会给你

enter image description here

如果要包括比最小值(即0,1,2)短的月份,则可以手动设置xticksxticklabels-

ax.set_xticks(range(-3,9))
ax.set_xticklabels(range(0,12))

哪个会给你

enter image description here