Python 使用matplotlib以x轴显示文字说明,而不是数字
我已经编写了代码以条形图的形式显示我的数据集。这是我的代码: 我已通过以下方式从.csv文件中读取数据:Python 使用matplotlib以x轴显示文字说明,而不是数字,python,pandas,matplotlib,data-visualization,Python,Pandas,Matplotlib,Data Visualization,我已经编写了代码以条形图的形式显示我的数据集。这是我的代码: 我已通过以下方式从.csv文件中读取数据: names = ["Clinic Number","Question Text","Answer Text","Answer Date","Class"] data = pd.read_csv('ADLCI.csv', names = names) plt.xticks(rotation=45) 然后 grouped = data.groupby(['Question Text','An
names = ["Clinic Number","Question Text","Answer Text","Answer Date","Class"]
data = pd.read_csv('ADLCI.csv', names = names)
plt.xticks(rotation=45)
然后
grouped = data.groupby(['Question Text','Answer Text']).size().reset_index(name='counts')
import matplotlib.pyplot as plt
plt.figure()
grouped.plot(kind='bar', title ="Functional Status Count", figsize=(15, 10), legend=True, fontsize=12)
plt.show()
这也是我想要以条形图显示的数据框的结果
Question Text Answer Text counts
0 CI function No 513
1 CI function Yes 373
2 bathing? No 2827
3 bathing? Yes 408
4 dressing? No 2824
5 dressing? Yes 423
6 feeding No 2851
7 feeding Yes 160
8 housekeeping No 2803
9 housekeeping Yes 717
10 preparing food No 2604
11 preparing food Yes 593
12 responsibility for own medications No 2793
13 responsibility for own medications Yes 625
14 shopping No 35
15 shopping Yes 49
16 toileting No 2843
17 toileting Yes 239
18 transferring No 2834
19 transferring Yes 904
20 using transportation No 2816
21 using transportation Yes 483
第一列数字已经自动添加,实际上我的数据集中没有
这是由该代码创建的条形图。
正如您在条形图中看到的,所有条形图的颜色都相同。x轴也是我刚才说的数字。但是我不想要这个形状。
我想要的是:
我将解释我想对上传到这里的图片做什么更改
而不是0和1。。。在x轴中,它应该描述问题文本
列。具体而言,x轴上的条形图是:正如我们在数据框中看到的,有两个CI函数
,一个用于yes
,另一个用于No
。我想要CI函数
而不是0和1,两种不同的颜色一种指向No
1596
的计数,另一种不同的颜色指向Yes
1376
下一个项目将是沐浴?
,同样,一个条指向17965
,另一个条指向702
有了这个,我应该有近十个小节,每个小节包含两个小节,就像我在上面放的链接一样彼此粘着
我尝试了各种方法,像上面的链接,但我的没有显示像那样或得到错误
谢谢:)
更新1
当我应用你的代码时:
import matplotlib.pyplot as plt
data.groupby(['Question Text','Answer Text']).sum().unstack().plot(kind='bar')
plt.show()
我得到了这个错误:
Traceback (most recent call last):
File "C:/Users/M193053/PycharmProjects/ADL-distribution/test.py", line 52, in <module>
data.groupby(['Question Text','Answer Text']).sum().unstack().plot(kind='bar')
File "C:\Users\M193053\Documents\Anaconda3\envs\conda3\lib\site-packages\pandas\plotting\_core.py", line 2941, in __call__
sort_columns=sort_columns, **kwds)
File "C:\Users\M193053\Documents\Anaconda3\envs\conda3\lib\site-packages\pandas\plotting\_core.py", line 1977, in plot_frame
**kwds)
File "C:\Users\M193053\Documents\Anaconda3\envs\conda3\lib\site-packages\pandas\plotting\_core.py", line 1804, in _plot
plot_obj.generate()
File "C:\Users\M193053\Documents\Anaconda3\envs\conda3\lib\site-packages\pandas\plotting\_core.py", line 258, in generate
self._compute_plot_data()
File "C:\Users\M193053\Documents\Anaconda3\envs\conda3\lib\site-packages\pandas\plotting\_core.py", line 373, in _compute_plot_data
'plot'.format(numeric_data.__class__.__name__))
TypeError: Empty 'DataFrame': no numeric data to plot
对我来说,这样似乎还可以:
但应用两个groupby似乎不合逻辑。正因为如此,我还不确定该怎么办。
泰克斯:花时间:)
更新两个
这是我的数据帧,由以下代码获得:
grouped = data.groupby(['Question Text','Answer Text']).size().reset_index(name='counts')
import matplotlib.pyplot as plt
grouped.groupby(['Question Text','Answer Text']).sum().unstack().plot(kind='bar')
plt.show()
grouped = data.groupby(['Question Text','Answer Text']).size().reset_index(name='counts')
0 CI function No 513
1 CI function Yes 373
2 bathing? No 2827
3 bathing? Yes 408
4 dressing? No 2824
5 dressing? Yes 423
6 feeding No 2851
7 feeding Yes 160
8 housekeeping No 2803
9 housekeeping Yes 717
10 preparing food No 2604
11 preparing food Yes 593
12 responsibility for own medications No 2793
13 responsibility for own medications Yes 625
14 shopping No 35
15 shopping Yes 49
16 toileting No 2843
17 toileting Yes 239
18 transferring No 2834
19 transferring Yes 904
20 using transportation No 2816
21 using transportation Yes 483
这是数据帧,由你的代码和我的代码组合而成:
grouped = data.groupby(['Question Text','Answer Text']).size().reset_index(name='counts')
print(grouped)
import matplotlib.pyplot as plt
final = grouped.groupby(['Question Text','Answer Text']).sum()
print(final)
Question Text Answer Text
CI function No 513
Yes 373
bathing? No 2827
Yes 408
dressing? No 2824
Yes 423
feeding No 2851
Yes 160
housekeeping No 2803
Yes 717
preparing food No 2604
Yes 593
responsibility for own medications No 2793
Yes 625
shopping No 35
Yes 49
toileting No 2843
Yes 239
transferring No 2834
Yes 904
using transportation No 2816
Yes 483
更新3
原始数据帧有200000行,如下所示:
1 bathing? No 3529933
2 dressing? No 3529933
3 feeding No 3529933
4 housekeeping No 3529933
5 responsibility for own medications No 3529933
6 using transportation No 3529933
7 toileting No 3529933
8 transferring No 3529933
10 preparing food No 3529933
11 bathing? NaN 2864155
12 dressing? NaN 2864155
13 feeding NaN 2864155
14 housekeeping NaN 2864155
15 responsibility for own medications NaN 2864155
16 toileting NaN 2864155
17 transferring NaN 2864155
19 preparing food NaN 2864155
20 using transportation Yes 2864155
21 bathing? NaN 2921299
22 dressing? NaN 2921299
您可以这样做(df
是您编写的数据帧):
输出:
也可以通过以下方式旋转xlabel:
names = ["Clinic Number","Question Text","Answer Text","Answer Date","Class"]
data = pd.read_csv('ADLCI.csv', names = names)
plt.xticks(rotation=45)
但我建议您将标签缩短,以使其更加清晰评论不用于扩展讨论;这段对话已经结束。