首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更具体地绘制出海运线图

如何更具体地绘制出海运线图
EN

Stack Overflow用户
提问于 2021-04-22 13:06:49
回答 1查看 229关注 0票数 1

给定一个mass DataFrame df

代码语言:javascript
复制
year        count
1980        -23
1980        -4
1981        10
1982        0
1982        4
...
2007        27
2008        0
2008        0
2009        -7
2009        5

值首先按year排序,然后按count排序。(显示的值可以任意更改)

我想可视化count如何随着year的增加而不同地分布,这可以通过百分位数图最有效地显示出来。但是,由于我的数据是在DataFrame中给出的,我认为使用seaborn.lineplot是一种更可行(坦率地说,也更简单)的方法

代码语言:javascript
复制
import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=[16,12])

plt.axhline(y=0, color='black', linestyle='dotted')
sns.lineplot(x="year", y="count", ax=ax, data=df, color='red')

它返回:

这张图在某种程度上有一定的用途,尽管我希望显示具有更多的可变性,而不仅仅是单个百分位梯度。(一个很好的例子是下面的图,其中有10个百分位的渐变,从这个链接复制过来:Using percentiles of a timeseries to set colour gradient in Python's matplotlib)

我想知道是否有办法使用seaborn.lineplot实现如此详细的绘图,如果没有,是否有办法从pandas DataFrame数据中做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-23 17:05:35

一旦您生成了第一个置信区间或仅生成了这条线,就可以使用matplotlib创建多个置信区间,如此post所示。

另一种选择是使用sns.lineplot在同一张图上绘制,尽管我认为seaborn不适用于此。以数据集flights为例,首先我们绘制中值或平均值线:

代码语言:javascript
复制
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

flights = sns.load_dataset("flights")
fig,ax = plt.subplots(1,1)

sns.lineplot(data=flights, x="year", y="passengers",ax=ax,ci=None,color="black")

然后我们设置一个调色板并继续添加不带线条的带(设置linestyle = ''):

代码语言:javascript
复制
cm = sns.color_palette("Blues",9)

for ix,ci in enumerate(range(10,90,10)):
    sns.lineplot(data=flights, x="year", y="passengers",
                 ci = ci,
                 ax=ax,linestyle='',
                 hue = ci,palette={ci:cm[ix]})

给出了类似这样的结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67207070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档