鱼C论坛

 找回密码
 立即注册
查看: 1953|回复: 18

画图

[复制链接]
发表于 2020-6-24 20:53:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有大佬能用python画图片里面的柱状图吗。数据在压缩包里。然后柱状图可以是性别和对手机电池容量的。跪求大佬指点
微信图片_20200624204743.png

table.rar

22.71 KB, 下载次数: 3

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-24 21:02:49 | 显示全部楼层
你要画成什么样的

评分

参与人数 1荣誉 +3 鱼币 +2 收起 理由
Twilight6 + 3 + 2 助力升级~~~

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:05:33 | 显示全部楼层
pyecharts 和 matplotlib 都可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 21:05:51 | 显示全部楼层
BIO-张磊 发表于 2020-6-24 21:02
你要画成什么样的

就是画成柱状图,横轴是类别:男和女,然后纵轴是满意不满意的人数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 21:07:36 | 显示全部楼层
liuzhengyuan 发表于 2020-6-24 21:05
pyecharts 和 matplotlib 都可以

呃,其实我想说大佬有类似案例的源程序吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:09:42 | 显示全部楼层
君子好逑 发表于 2020-6-24 21:07
呃,其实我想说大佬有类似案例的源程序吗

没试过,不知道行不行
pyechats:https://www.jianshu.com/p/554d64470ec9
matplotlib:https://www.jianshu.com/p/e8033e25e1aa

应该不太好理解,不知道有没有更好的教程
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 21:11:22 | 显示全部楼层
liuzhengyuan 发表于 2020-6-24 21:09
没试过,不知道行不行
pyechats:https://www.jianshu.com/p/554d64470ec9
matplotlib:https://www.ji ...

谢谢大佬帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:13:36 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-6-24 21:15 编辑


好像现在 pyecharts 语法变了,这个不管用了,不要意思,我再去研究研究
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 21:17:16 | 显示全部楼层
liuzhengyuan 发表于 2020-6-24 21:13
好像现在 pyecharts 语法变了,这个不管用了,不要意思,我再去研究研究

大佬,你就像一道光照亮了我黑暗的课题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:19:42 | 显示全部楼层
君子好逑 发表于 2020-6-24 21:17
大佬,你就像一道光照亮了我黑暗的课题

其实尽管语法变了,但是代码执行完后,在同级目录下还会出现一个叫 xxx.html 的文件,打开就是图表了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:22:22 | 显示全部楼层
话说你发的图片 和你的数据没有关联吧?  日期呢? 你想把什么设为 x 轴 什么设为 y 轴?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:32:24 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-24 21:34 编辑



Figure_1.png

给你个模板:

  1. import matplotlib.pyplot as plt

  2. # 已知数据
  3. a = ['Monday','Tuesday','Friday','Sunday']

  4. b_15 = [1235,756,2045,968]
  5. b_14 = [2358,899,2358,662]

  6. # 设置中文文字
  7. plt.rcParams['font.sans-serif'] = ['SIMHEI']

  8. # 设置图片大小,dpi设置分辨率
  9. plt.figure(figsize=(15,5),dpi=80)

  10. # 设置初始宽度
  11. bar_width = 0.2

  12. # 设置x轴数据
  13. x_14 = list(range(len(a)))
  14. x_15 = [i+bar_width for i in x_14]


  15. # 设置条形图
  16. plt.bar(x_14,b_14,width=bar_width,label='9月14日')
  17. plt.bar(x_15,b_15,width=bar_width,label='9月15日')


  18. # 显示图例
  19. plt.legend()

  20. # 设置x轴刻度
  21. plt.xticks(x_15,a)

  22. # 设置x、y轴信息,图片标题
  23. plt.xlabel('我是x轴标题')
  24. plt.ylabel('我是y轴标题')
  25. plt.title('xxxxxx柱状图')


  26. # 显示图片
  27. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:52:39 | 显示全部楼层
本帖最后由 BIO-张磊 于 2020-6-24 21:58 编辑
  1. import pandas as pd
  2. import matplotlib.pyplot as plt

  3. data = pd.read_csv("table.csv")
  4. data_sex = data.iloc[:,2]
  5. data_result = data.iloc[:,6]

  6. new_data = pd.DataFrame(list(zip(data_sex,data_result)))
  7. new_data_male = new_data[new_data[0] == "男"]
  8. new_data_female = new_data[new_data[0] == "女"]

  9. male = list(new_data_male[1].value_counts())
  10. female = list(new_data_female[1].value_counts())

  11. plt.bar([0,0.2,0.4],male,width = 0.2,edgecolor = "white")
  12. plt.bar([0.6,0.8,1],female,width = 0.2,edgecolor = "white")

  13. sex = ["male","female"]

  14. plt.xticks([0.2,0.8],sex)
  15. plt.show()
复制代码

结果如下图,男女做横坐标轴,男/女的部分,分别是满意,勉强够用,不满意

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 21:54:24 | 显示全部楼层
Twilight6 发表于 2020-6-24 21:22
话说你发的图片 和你的数据没有关联吧?  日期呢? 你想把什么设为 x 轴 什么设为 y 轴?

呃,大佬,我发的图片其实就是个样例,意思就是成果是跟图片上差不多的柱状图。然后数据的话其实是自选,横轴可以选男女或者是其他的比如职业类别,然后纵轴就可以选另一个,随便选两个做横轴纵轴就行,而我比较喜欢男女做横轴
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-24 21:58:09 | 显示全部楼层

谢谢大佬,祝你明天出门就有艳遇,低头就能捡钱
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:59:00 | 显示全部楼层
君子好逑 发表于 2020-6-24 21:58
谢谢大佬,祝你明天出门就有艳遇,低头就能捡钱


这个如果不是你需要的图,那我也没办法了,我把效果图放在上面了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 22:21:26 | 显示全部楼层
本帖最后由 BIO-张磊 于 2020-6-24 22:24 编辑
  1. import pandas as pd
  2. import matplotlib.pyplot as plt

  3. data = pd.read_csv("table.csv")
  4. data_sex = data.iloc[:,2]
  5. data_result = data.iloc[:,6]

  6. new_data = pd.DataFrame(list(zip(data_sex,data_result)))
  7. new_data_male = new_data[new_data[0] == "男"]
  8. new_data_female = new_data[new_data[0] == "女"]

  9. male = list(new_data_male[1].value_counts())
  10. female = list(new_data_female[1].value_counts())

  11. plt.bar([0,0.6,1.2],male,width = 0.2,edgecolor = "white",label='male')
  12. plt.bar([0.2,0.8,1.4],female,width = 0.2,edgecolor = "white",label='female')

  13. result = ["manyi","mianqianggouyong","bumanyi"]

  14. plt.xticks([0.1,0.7,1.3],result)
  15. plt.legend()
  16. plt.show()
复制代码


                               
登录/注册后可看大图

我把代码略微改了以下,应该是你要的效果图了,不过这不是性别做横坐标轴,这叫性别作图例,下次用词准确
M~%H685%XFY@0VMJJ$EY]Z6.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-25 11:44:21 | 显示全部楼层
BIO-张磊 发表于 2020-6-24 21:59
这个如果不是你需要的图,那我也没办法了,我把效果图放在上面了

稳大佬,差不多就是这个样子的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 11:50:41 | 显示全部楼层
本帖最后由 BIO-张磊 于 2020-6-25 21:50 编辑
君子好逑 发表于 2020-6-25 11:44
稳大佬,差不多就是这个样子的

把这段代码保存为一个新的文件,和你那个table.csv放在同一个文件夹下,双击运行代码文件,就会出来你要的图。pandas numpy 和matplotlib这三个没有,就自己安装,满意请采纳

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import numpy as np

  4. def read_data(url,col_a = 0,col_b = 1):
  5.     #读取数据
  6.     global data,new_data
  7.     data = pd.read_csv(url)
  8.     data_col = data.columns.to_list()
  9.     data = data[[data_col[col_a],data_col[col_b]]]
  10.     #确定index
  11.     data_index = sorted(list(data.iloc[:,0].drop_duplicates()))
  12.     #data_columns = sorted(list(data.iloc[:,1].drop_duplicates()))
  13.    
  14.     new_data = pd.DataFrame()
  15.     #统计columns的次数
  16.     for i in data_index:
  17.         data_i = pd.DataFrame((data[data.iloc[:,0] == i].iloc[:,1]).value_counts()).T
  18.         data_i.index = [i]
  19.         new_data = pd.concat([new_data,data_i])
  20.     else:
  21.         if np.any(new_data.isnull()):#如果有缺失值
  22.             new_data.fillna(value = 0,inplace = True)
  23.         

  24. #设置stacked和T两个变量,可以让bar绘制四种类型的图   
  25. def bar(data_bar,width = 0.5,edgecolor = "white",stacked = False,T = False):
  26.     #兼容中文
  27.     plt.rcParams['font.sans-serif'] = ['SIMHEI']
  28.    
  29.     if T:#若T为True,转置index和columns
  30.         data_bar = data_bar.T
  31.         
  32.     if stacked :#stacked为True绘制堆积柱状图
  33.         data_bar.plot.bar(width = width,stacked = stacked)
  34.     else:
  35.         data_bar.plot.bar(width = width,edgecolor = edgecolor)
  36.    
  37.     plt.show()
  38.    
  39.    
  40. if __name__ == "__main__":
  41.     read_data("table.csv",2,6)
  42.     bar(new_data,stacked = False,T = False)
  43.     bar(new_data,stacked = False,T = True)
  44.     bar(new_data,stacked = True,T = False)
  45.     bar(new_data,stacked = True,T = True)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表