Python 向x轴上的标签添加后缀
我需要绘制一些与时间有关的值,带有特定的标签。 您可以将我的数据想象为如下示例:Python 向x轴上的标签添加后缀,python,pandas,matplotlib,Python,Pandas,Matplotlib,我需要绘制一些与时间有关的值,带有特定的标签。 您可以将我的数据想象为如下示例: ID Time Clock 260 21 hours 20:30 # this should be referred to yesterday 127 21 hours 20:30 7 5 hours 12:30 10 6 hours 11:30 8 6 hours 11:30 ... ... ... 62 NaN NaN 82 NaN NaN 时
ID Time Clock
260 21 hours 20:30 # this should be referred to yesterday
127 21 hours 20:30
7 5 hours 12:30
10 6 hours 11:30
8 6 hours 11:30
... ... ...
62 NaN NaN
82 NaN NaN
时间是指看当前时间的时间(约17:40),而Clock
应该是“手表时间”,即当前时间(约17:40)减去时间列给出的小时数。
在时间上,排序应该从最高到最低,类似于时钟
。
列类型都是对象。
在绘图中,我应该在垂直轴上有ID,在x轴上有Clock
。
这意味着在x轴上我应该有时钟时间,查看clock
列。例如,48:00意味着48小时前。
我希望使用以下标签,而不是20:30或48:00,例如:20小时前
,48小时前
import matplotlib.pyplot as plt
plt.scatter(df['Clock'], df['ID'])
plt.show()
但是,我需要一些帮助来添加后缀(即,小时前)或替换x轴上的时间标签。目前,您正在传递时钟列中的值以绘制在x轴上,因为这些是字符串,matplotlib将它们解释为分类变量。如果您对此没有异议,那么每个x记号将被等距隔开,而不管它们的值如何(但我们可以在传递数据帧之前对其进行排序),然后为了获得所需的记号标签,您可以从字符串的冒号符号前取字符串的部分(例如
'20'
,来自字符串'20:30'
)然后将字符串'hours ago'
添加到该字符串中,以获得'20 hours ago'
。然后将这些字符串作为标签传递给plt.xticks
方法,以及Clock
列中的原始标记
import matplotlib.pyplot as plt
import pandas as pd
## recreate the data with times unsorted
df = pd.DataFrame({
'ID':[260,127,7,10,8],
'Time':['21 hours','21 hours','5 hours','6 hours','6 hours'],
'Clock':['20:30','20:30','12:30','11:30','11:30',]
})
df_sorted = df.sort_values(by='Clock',ascending=False)
plt.scatter(df_sorted['Clock'], df_sorted['ID'])
## avoid plotting duplicate clock ticks over itself
df_clock_ticks = df_sorted.drop_duplicates(subset='Clock')
## take the number of hours before the colon, and then add hours ago
plt.xticks(ticks=df_clock_ticks['Clock'], labels=df_clock_ticks['Clock'].str.split('\:').str[0] + ' hours ago')
plt.show()
是
时间
和时钟
列是时间增量还是字符串?它们都是字符串/对象,谢谢你的澄清,答案解释得很好。非常感谢你,德里克!不客气-很高兴我的回答很有帮助!