gpt4 book ai didi

python - 用虚线替换部分图

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:36 25 4
gpt4 key购买 nike

我想用从前一点开始的虚线替换函数下降到“-1”的部分情节(见下图)。

这是我编写的一些代码及其输出:

import numpy as np

import matplotlib.pyplot as plt
y = [5,6,8,3,5,7,3,6,-1,3,8,5]

plt.plot(np.linspace(1,12,12),y,'r-o')
plt.show()

for i in range(1,len(y)):
if y[i]!=-1:
plt.plot(np.linspace(i-1,i,2),y[i-1:i+1],'r-o')
else:
y[i]=y[i-1]
plt.plot(np.linspace(i-1,i,2),y[i-1:i+1],'r--o')
plt.ylim(-1,9)
plt.show()

这是原作

original plot

修改后的情节:

modified plot

我编写的代码有效(它产生了所需的输出),但是当我在我的(更大的)数据集上实际运行它时它效率低下并且需要很长时间。有没有更聪明的方法来做到这一点?

最佳答案

你可以在没有循环的情况下实现类似的东西:

import pandas as pd
import matplotlib.pyplot as plt

# Create a data frame from the list
a = pd.DataFrame([5,6,-1,-1, 8,3,5,7,3,6,-1,3,8,5])

# Prepare a boolean mask
mask = a > 0

# New data frame with missing values filled with the last element of
# the previous segment. Choose 'bfill' to use the first element of
# the next segment.
a_masked = a[mask].fillna(method = 'ffill')

# Prepare the plot
fig, ax = plt.subplots()
line, = ax.plot(a_masked, ls = '--', lw = 1)
ax.plot(a[mask], color=line.get_color(), lw=1.5, marker = 'o')
plt.show()

enter image description here

您还可以通过为线条选择不同的颜色来突出显示负区域: enter image description here

我的回答基于 2017 年 7 月的一篇精彩帖子。后者还解决了第一个元素为 NaN 或您的情况为负数的情况: Dotted lines instead of a missing value in matplotlib

关于python - 用虚线替换部分图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48260014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com