Как сгладить графики с помощью python

#python #dataframe #csv #matplotlib #normalization

#python #фрейм данных #csv #matplotlib #нормализация

Вопрос:

Я пытаюсь сгладить этот график. Но я не смог этого сделать. Пытался интерполировать с помощью splrep, но он не работает. Любая помощь будет высоко оценена. График был построен с использованием столбцов Dataframe тока, напряжения и часов работы. изображение

изображение

 df2=data[:2000]
plt.subplot(2,1,1)
plt.plot(df2['Op_Hours_Fcpm'],df2['Current'],'r')
plt.xlabel('Operating hours')
plt.title('Current Fluctuations')

plt.subplot(2,1,2)
plt.plot(df2['Op_Hours_Fcpm'],df2['Voltage'],'y')
plt.xlabel('Operating hours')
plt.title('Voltage Fluctuations')

plt.tight_layout()
plt.show()
 

Я попробовал и другим способом:

 fig, ax = plt.subplots()
ax.plot(x_int, current_int, lw = 5, alpha = 0.30, label = 'current')
ax.plot(x_int, voltage_int, lw = 5, alpha = 0.30, label = 'voltage')

ax.set_xlabel('ripples')
ax.set_ylabel('hrs')
# Set the correct xticks
ax.set_xticks(x_map)
ax.set_xticklabels(x)
fig.legend(bbox_to_anchor=(0.7, 0.3), loc='upper left', ncol=1)
fig.show()
 

Это дало такой результат

Комментарии:

1. Пожалуйста, поделитесь своим кодом, который вы использовали для создания этих графиков

2. Привет @Maaddy, я обновляю свой вопрос с помощью фрагмента кода и структуры данных..

3. Каков ваш желаемый результат? второй график выглядит для меня «гладким». Что именно вы подразумеваете под «гладким»?

4. Привет, Мэдди, моя главная цель — сделать первый график «подзаголовками» таким же гладким, как и второй.

5. Я хочу изменить свой первый скрипт, можете ли вы помочь какой-либо помощью? Моя основная цель — отобразить ток и напряжение на одном или отдельном графике и проанализировать их переходный характер. Но я хочу плавную кривую вместо линии.

Ответ №1:

Поскольку вы не предоставили исходные данные, я попытался воссоздать некоторые точки из изображения, используя

 import pandas
print(pandas.__version__)
import matplotlib.pyplot as plt
x = [0.5, 0.5, 1,   1, 2,    2,  2 , 3]
y = [0,   600, 0, 600, 0, 1000, 600, 0]
plt.plot(x,y,'r');
plt.xlabel('Operating hours')
plt.title('Current Fluctuations');
plt.savefig('original.png');
 

что дает

оригинал

Проблема с первым подзаголовком заключается в том, что некоторые моменты времени содержат несколько значений, включая как «нулевые», так и ненулевые значения. Это легче рассматривать как точечный график

 plt.scatter(x, y);
plt.xlabel('Operating hours')
plt.title('Current Fluctuations');
plt.savefig('scatter.png')
 

разброс

Эта проблема с визуализацией указывает на проблему с базовыми данными.

Одним из вариантов было бы отбросить нулевые данные и сохранить только ненулевые точки данных.