Seaborn Plotting x轴的绘图来自熊猫

时间:2019-04-30 14:16:48

标签: python matplotlib seaborn

我正在尝试绘制一个海洋图的线图,其中的y轴值和x轴日期来自熊猫数据框。

当我创建线图而不将date列转换为datetime对象时,它将日期放置在错误的顺序中。当我将日期列转换为日期时间格式时,它会给出奇怪的x标签,并且仅显示5个日期。

df = pd.read_csv("dddd.csv")
df["date"] = pd.to_datetime(df["date"])
df = df.sort_values(["date"])
ax = sns.lineplot(y=df["google"],x=df["date"],color="red",data=df)

plt.show()

我只想绘制带有x标签的数据,按日期排序。这是一些示例数据。

25-03-2019  -100
26-03-2019  -66.66666667
27-03-2019  -80
28-03-2019  -87.08333333
29-03-2019  -88.88888889
30-03-2019  -86.28526646
31-03-2019  -87.5
01-04-2019  -87.87878788
02-04-2019  -82.92682927
03-04-2019  -84.09090909
04-04-2019  -84.7826087
05-04-2019  -85.71428571
06-04-2019  -81.30677848
07-04-2019  -81.98051948
08-04-2019  -82.14285714
09-04-2019  -78.46153846
10-04-2019  -76.05633803
11-04-2019  -75
12-04-2019  -75
13-04-2019  -80
14-04-2019  -83.33333333
15-04-2019  -83.33333333
16-04-2019  -77.77777778
17-04-2019  -68
18-04-2019  -54.70085471
19-04-2019  -64.70588235
20-04-2019  -66.66666667

1 个答案:

答案 0 :(得分:0)

尽管这个问题肯定是重复的,但这里有一些解释:

  1. 如果不转换为datetime,则x轴是无序的,因为python无法识别值是日期。在这里,它可能会为每个点画一个刻度,因为它不知道如何以连续的比例拟合“ 16-04-2019”。 (尝试在x轴上绘制一个字符串数组作为比较)。

  2. 如果您 do 转换为datetimeseaborn,那么熊猫就足够聪明了,可以注意到您的日期是连续的。由于ticklabels在绘制所有图元时会重叠,因此它会忽略其中的一些并以规则的间隔绘制刻度线。

您可以通过ax.set_ticks(locations)来影响位置,通过ax.tick_params(rotation=90, horizontal_alignment='left')来影响样式,或者通过ax.set_xticklabels(labels)来影响标签。 (以关键字为例)。

您也可以使用

import matplotlib.dates ad md

locs = md.YearLocator() # Locations for yearly ticks
format = md.MajorFormatter('%B %Y') # Format for labels

访问格式化程序功能,并使用ax.set_major_locator / formatter将其应用于绘图。

要简单地为每个数据点画一个刻度,在您的情况下,请使用:

ax.set_xticks(df["Date"])