标题:python小白询问matplotlib画图问题,画出来不知道出了什么问题
只看楼主
newya4141
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2019-11-20
结帖率:100%
已结贴  问题点数:20 回复次数:8 
python小白询问matplotlib画图问题,画出来不知道出了什么问题
提问:画10个菜品的盈利帕累托图,主坐标轴画10个菜品的盈利降序柱状图,副坐标轴画10个菜品的累计盈利帕累托图,数据如下:
菜品ID    菜品名    盈利
17148    A1    9173
17154    A2    5729
109      A3    4811
117      A4    3594
17151    A5    3195
14       A6    3026
2868     A7    2378
397      A8    1970
88       A9    1877
426      A10    1782

自己写的程序如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.rcParams['axes.unicode_minus']=False  #解决负号无法正常显示
df=pd.read_excel('D:\PythonProject\练习数据挖掘数据\第3章\catering_dish_profit.xls',index_col='菜品名')

fig=plt.figure()
ax1=fig.add_subplot(1,1,1)
a=df['盈利'].copy()
print(a)
b=pd.Series(a.values.cumsum()/sum(a.values),index=a.index)
print(b)
ax2=ax1.twinx()
ax1.bar(a.index,a.values)
ax2.plot(b.index,b.values)
ax1.set_xlabel('菜品名')
ax1.set_ylabel('盈利', color='g')
ax2.set_ylabel('盈利比例', color='b')
print(a.index,a.values)
plt.show()

自己画的结果不太对,不知道哪里出了问题,麻烦帮忙看看!!谢谢!!



[此贴子已经被作者于2019-11-20 15:11编辑过]

搜索更多相关主题的帖子: 数据 values python index print 
2019-11-20 15:07
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:0 
回复 楼主 newya4141
你这个不太对指的是?
2019-11-20 16:21
newya4141
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2019-11-20
得分:0 
回复 2楼 fall_bernana
我画出来图形按照A1、A10、A2、A3、A4、A5、A6、A7、A8、A9排列,而且帕累托图形有两条线,不知道为什么

[此贴子已经被作者于2019-11-20 18:00编辑过]

2019-11-20 17:58
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:0 
回复 3楼 newya4141

我这里是正常的.你需要查看下你的xlsx文件是否有问题
2019-11-20 18:04
newya4141
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2019-11-20
得分:0 
回复 3楼 newya4141
你怎么画的哈,是按照我这个程序画的吗?有什么改动吗?

[此贴子已经被作者于2019-11-20 21:37编辑过]

2019-11-20 21:35
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:20 
回复 5楼 newya4141
没有,程序是一样的.所以我怀疑是你的xlsx文件的内容有问题
2019-11-21 08:46
newya4141
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2019-11-20
得分:0 
回复 5楼 newya4141
好的,谢谢哈,我再检查一下
2019-11-21 11:38
newya4141
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2019-11-20
得分:0 
回复 6楼 fall_bernana
我检查了一遍数据,没有问题哈。我发现是因为matplotlib作图会有一个默认排序问题,自动按照A1、A10、A2。。。排序,我修改了一下程序,画图的时候修改一下x变成排序顺序,再重新设置一下x坐标轴标签,就可以了哈
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.rcParams['axes.unicode_minus']=False  #解决负号无法正常显示
df=pd.read_excel('D:\PythonProject\练习数据挖掘数据\第3章\catering_dish_profit.xls',index_col='菜品名',sheet_name="Sheet1")

fig=plt.figure()
ax1=fig.add_subplot(1,1,1)

a=df['盈利'].copy()
a.sort_values(ascending=False)
b=pd.Series(a.values.cumsum()/sum(a.values),index=a.index)

ax2=ax1.twinx()
ax1.bar(np.arange(len(a.index)),a.values)
ax2.plot(np.arange(len(b.index)),b.values)
ax1.set_xlabel('菜品名')
ax1.set_ylabel('盈利', color='g')
ax2.set_ylabel('盈利比例', color='b')
ax1.set_xticks(np.arange(len(a.index)))
ax1.set_xticklabels(a.index)
print(a.index,a.values)
plt.show()
2019-11-21 17:18
bczgsky
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:20
注 册:2019-12-5
得分:0 
这个不太懂,帮顶
2019-12-06 16:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497952-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.201183 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved