मैं कई वर्षों में दिन पर निर्भर डेटा प्लॉट करना चाहता हूं जहां वर्ष एक्स-अक्ष पर होना चाहिए (उदाहरण के लिए 2016,2017,2018)। ऐसा करने का एक अच्छा तरीका क्या है?

हर साल मेरे पास उन दिनों की एक सूची होती है जिन्हें मैं एक्स-अक्ष पर प्लॉट करता हूं लेकिन निश्चित रूप से पाइथन इस धुरी को रखता है और एक दूसरे के ऊपर विभिन्न वर्षों के सभी डेटा प्लॉट करता है।

कोई सुझाव?

कोड:

मेरे शब्दकोश L_B_1_mean का एक छोटा संस्करण इस तरह दिखता है:

2016018 5.68701407589
2016002 4.72437644462
2017018 3.39389424822
2018034 7.01093439059
2018002 8.79958946488
2017002 3.55897852367

कोड:

data_plot = {"x":[], "y":[], "label":[]}
for label, coord in L_B_1_mean.items():
    data_plot["x"].append(int(label[-3:]))             
    data_plot["y"].append(coord)
    data_plot["label"].append(label)


# add labels
for label, x, y in zip(data_plot["label"], data_plot["x"], data_plot["y"]):
    axes[1].annotate(label, xy = (x, y+0.02), ha= "left")


# 1 channel different years Plot
plt_data = axes[1].scatter(data_plot["x"], data_plot["y"])

मैं यहां अपने x-मानों का निर्माण करता हूं: data_plot["x"].append(int(label[-3:])) जहां मैं नाम टैग पढ़ता हूं जैसे: २०१६००२ और केवल दिन का मूल्य प्राप्त करें: ००२

अंत में मेरे पास प्रति वर्ष ३६५ दिन हैं और अब मैं २०१६ का डेटा फिर २०१७ और फिर २०१८ को एक-दूसरे के ऊपर रखने के बजाय एक-दूसरे के बाद प्लॉट करना चाहूंगा

0
Shaun 2 अक्टूबर 2018, 10:07

1 उत्तर

सबसे बढ़िया उत्तर

आपके पास एक निर्देश है

L_B_1_mean 

{'2016018': 5.68701407589,
 '2016002': 4.72437644462,
 '2017018': 3.39389424822,
 '2018034': 7.010934390589999,
 '2018002': 8.79958946488,
 '2017002': 3.55897852367}

पंडों का उपयोग करके प्लॉट करें:

import pandas as pd

आप बस इस निर्देश से एक पांडा श्रृंखला बना सकते हैं:

s = pd.Series(L_B_1_mean)

2016018    5.687014
2016002    4.724376
2017018    3.393894
2018034    7.010934
2018002    8.799589
2017002    3.558979
dtype: float64

... और इंडेक्स में तारीखों को तार डालें:

s.index = pd.to_datetime(s.index, format='%Y%j')

2016-01-18    5.687014
2016-01-02    4.724376
2017-01-18    3.393894
2018-02-03    7.010934
2018-01-02    8.799589
2017-01-02    3.558979
dtype: float64

तब आप अपना डेटा आसानी से प्लॉट कर सकते हैं:

s.plot(marker='o')

enter image description here

डेटाटाइम और matplotlib का उपयोग करके प्लॉट करें:

import datetime as DT
import matplotlib.pyplot as plt

t = [DT.datetime.strptime(k, '%Y%j') for k in L_B_1_mean.keys()]
v = list(L_B_1_mean.values())

v = sorted(v, key=lambda x: t[v.index(x)])
t = sorted(t)

plt.plot(t, v, 'b-o')
0
SpghttCd 2 अक्टूबर 2018, 20:36