如何解决如何使用pyplot通过减小y轴的值对散点图进行排序?
我有一个数据帧df1,其中包含两列freq和RN,数据按频率按升序排序。
In [2]: df1.head()
Out[2]:
freq RN
147 1 181
56 1 848
149 1 814
25 1 829
我想绘制一个散点图,其中X轴为RN,y轴为频率,其中X值按y值的升序排列。我希望x轴按照df1的顺序排列为841,848,835,...已根据频率值的升序进行了排序。
现在,如果我写plt.scatter('RN','freq',data=df1)
,则得到的输出x轴不会按频率的升序排序。它以其自身的自然升序排列,例如800,801,...,860。
注意: plt.bar('RN',data=df1)
以我想要的正确方式工作。
如何更改它?
解决方法
- 如果
RN
列为数字,则plot API将对其进行数字排序。 - 如果将
RN
列类型设置为str
,则可以完成此操作。- 如果
RN
中的值是唯一的,则效果最好。如果它们不是唯一的,则将将非唯一freq
的所有RN
值一起绘制。 - 如果
RN
不是唯一的,则plot API无法将一个值与另一个值进行微分。
- 如果
非唯一RN(a)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# create test data
np.random.seed(365)
data = {'freq': np.random.randint(20,size=(20,)),'RN': np.random.randint(800,900,))}
df = pd.DataFrame(data)
# convert RN to a str type
df.RN = df.RN.astype(str)
# sort freq
df.sort_values('freq',ascending=True,inplace=True)
# plot
plt.scatter('RN','freq',data=df)
非唯一RN(b)
- 使用
pandas.DataFrame.groupby
将非唯一的RN分组在一起
# create test data
# create test data
np.random.seed(365)
data = {'freq': np.random.randint(20,))}
df = pd.DataFrame(data)
# convert RN to a str type
df.RN = df.RN.astype(str)
# combine non-unique RN with groupby and sort by freq
dfg = df.groupby('RN',as_index=False)['freq'].sum().sort_values('freq')
# plot
plt.scatter('RN',data=dfg)
唯一RN
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# create test data
np.random.seed(365)
data = {'freq': np.random.randint(20,'RN': np.arange(800,820)}
df = pd.DataFrame(data)
# convert RN to a str type
df.RN = df.RN.astype(str)
# sort `freq`
df.sort_values('freq',data=df)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。