首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘图平滑matplotlib和出海

绘图平滑matplotlib和出海
EN

Stack Overflow用户
提问于 2020-05-14 21:59:47
回答 2查看 4.4K关注 0票数 0

我正在尝试以一种很好的方式显示我的数据,就像seaborn文档中看到的那样:

我不太确定如何继续。我设法得到了点的值和它们各自的标准差,但它看起来很分散,而我只想显示一个趋势:

我查看了herethere试图应用建议的解决方案,但我无法使其工作。

下面是我使用的方法:

代码语言:javascript
复制
Final_array =         Mean       Std
0   0.739269  0.157892
1   0.807382  0.160464
2   0.800024  0.137239
3   0.825854  0.132472
4   0.864854  0.070544
..       ...       ...
95  0.797202  0.101961
96  0.747578  0.143394
97  0.751472  0.158651
98  0.587009  0.198987
99  0.728447  0.104601

sns.set(style="darkgrid", palette="muted", color_codes=True)
fig, ax = plt.subplots(figsize=(7,5))
y_pos = np.arange(Final_array.shape[0])
ax.errorbar(y_pos, Final_array[:,0], yerr=Final_array[:,1], elinewidth=0.5)
plt.show()

有谁有主意吗?我在使用图方面是一个非常初级的人。是否有可能变得平滑?并获得良好的覆盖,如在海上图像,而不是错误条?

这些可能是愚蠢的问题。

致以亲切的问候,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-15 00:20:17

可以对平滑的上曲线和下曲线使用fillbetween。选择更高的sigma将提供更多的平滑度。

下面是一些示例代码:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage.filters import gaussian_filter1d

x = np.linspace(0, 100, 100)
y = 0.95 - ((50 - x) / 200) ** 2
err = (1 - y) / 2
y += np.random.normal(0, err / 10, y.size)

upper = gaussian_filter1d(y + err, sigma=3)
lower = gaussian_filter1d(y - err, sigma=3)

fig, ax = plt.subplots(ncols=2)

ax[0].errorbar(x, y, err, color='dodgerblue')

ax[1].plot(x, y, color='dodgerblue')
ax[1].fill_between(x, upper, lower, color='crimson', alpha=0.2)

plt.show()

票数 2
EN

Stack Overflow用户

发布于 2020-05-15 07:44:00

谢谢你的帮助!我设法生成了我想要的图形!

首先,样条线不能工作,因为我的数据没有排序。因此,我使用了@JohanC提出的gaussian_filter1d,并找到了here。然而,显然它可以改变数据(请阅读here上的评论),所以我决定将这两个图一起绘制:

使用此最终版本:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.ndimage.filters import gaussian_filter1d

Final_array =         Mean       Std
0   0.739269  0.157892
1   0.807382  0.160464
2   0.800024  0.137239
3   0.825854  0.132472
4   0.864854  0.070544
..       ...       ...
95  0.797202  0.101961
96  0.747578  0.143394
97  0.751472  0.158651
98  0.587009  0.198987
99  0.728447  0.104601

sns.set(style="darkgrid", palette="muted", color_codes=True)
fig, ax = plt.subplots(figsize=(7,5))
y_pos = np.arange(Final_array.shape[0])

# Smoothing
Final_array_smooth = gaussian_filter1d(Final_array[:,0], sigma=2)

# Error formating
upper_err = gaussian_filter1d(Final_array[:,0] + (Final_array[:,1]/2), sigma=5)
lower_err = gaussian_filter1d(Final_array[:,0] - (Final_array[:,1]/2), sigma=5)

ax.plot(y_pos, Final_array[:,0], '--', linewidth=0.7, color='k', alpha=0.45)
ax.plot(y_pos, Final_array_smooth)
ax.fill_between(y_pos, upper_err, lower_err, color='crimson', alpha=0.2)

ax.set_ylim(np.min(Final_array[:,0])-(np.min((Final_array[:,0])*20)/100), np.max(Final_array[:,0])+(np.max((Final_array[:,0])*10)/100))
plt.show()

非常感谢!

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

https://stackoverflow.com/questions/61799259

复制
相关文章

相似问题

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