Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向x轴上的标签添加后缀_Python_Pandas_Matplotlib - Fatal编程技术网

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()

时间
时钟
列是时间增量还是字符串?它们都是字符串/对象,谢谢你的澄清,答案解释得很好。非常感谢你,德里克!不客气-很高兴我的回答很有帮助!