我正在尝试绘制一个海洋图的线图,其中的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
答案 0 :(得分:0)
尽管这个问题肯定是重复的,但这里有一些解释:
如果不转换为datetime
,则x轴是无序的,因为python无法识别值是日期。在这里,它可能会为每个点画一个刻度,因为它不知道如何以连续的比例拟合“ 16-04-2019”。 (尝试在x轴上绘制一个字符串数组作为比较)。
如果您 do 转换为datetime
,seaborn
,那么熊猫就足够聪明了,可以注意到您的日期是连续的。由于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"])