鱼C论坛

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

画图

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

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

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

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

table.rar

22.71 KB, 下载次数: 3

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 21:05:33 | 显示全部楼层
pyecharts 和 matplotlib 都可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是画成柱状图,横轴是类别:男和女,然后纵轴是满意不满意的人数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

呃,其实我想说大佬有类似案例的源程序吗
想知道小甲鱼最近在做啥?请访问 -> 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

应该不太好理解,不知道有没有更好的教程
想知道小甲鱼最近在做啥?请访问 -> 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 ...

谢谢大佬帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


好像现在 pyecharts 语法变了,这个不管用了,不要意思,我再去研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬,你就像一道光照亮了我黑暗的课题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

其实尽管语法变了,但是代码执行完后,在同级目录下还会出现一个叫 xxx.html 的文件,打开就是图表了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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



Figure_1.png

给你个模板:
import matplotlib.pyplot as plt

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

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

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

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

# 设置初始宽度
bar_width = 0.2

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


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


# 显示图例
plt.legend()

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

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


# 显示图片
plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

sex = ["male","female"]

plt.xticks([0.2,0.8],sex)
plt.show()
结果如下图,男女做横坐标轴,男/女的部分,分别是满意,勉强够用,不满意

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

谢谢大佬,祝你明天出门就有艳遇,低头就能捡钱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


这个如果不是你需要的图,那我也没办法了,我把效果图放在上面了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

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

plt.xticks([0.1,0.7,1.3],result)
plt.legend()
plt.show()

                               
登录/注册后可看大图

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

使用道具 举报

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

稳大佬,差不多就是这个样子的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

def read_data(url,col_a = 0,col_b = 1):
    #读取数据
    global data,new_data
    data = pd.read_csv(url)
    data_col = data.columns.to_list()
    data = data[[data_col[col_a],data_col[col_b]]]
    #确定index
    data_index = sorted(list(data.iloc[:,0].drop_duplicates()))
    #data_columns = sorted(list(data.iloc[:,1].drop_duplicates()))
    
    new_data = pd.DataFrame()
    #统计columns的次数
    for i in data_index:
        data_i = pd.DataFrame((data[data.iloc[:,0] == i].iloc[:,1]).value_counts()).T
        data_i.index = [i]
        new_data = pd.concat([new_data,data_i])
    else:
        if np.any(new_data.isnull()):#如果有缺失值
            new_data.fillna(value = 0,inplace = True)
        

#设置stacked和T两个变量,可以让bar绘制四种类型的图    
def bar(data_bar,width = 0.5,edgecolor = "white",stacked = False,T = False):
    #兼容中文
    plt.rcParams['font.sans-serif'] = ['SIMHEI']
    
    if T:#若T为True,转置index和columns
        data_bar = data_bar.T
        
    if stacked :#stacked为True绘制堆积柱状图
        data_bar.plot.bar(width = width,stacked = stacked)
    else:
        data_bar.plot.bar(width = width,edgecolor = edgecolor)
    
    plt.show()
    
    
if __name__ == "__main__":
    read_data("table.csv",2,6)
    bar(new_data,stacked = False,T = False)
    bar(new_data,stacked = False,T = True)
    bar(new_data,stacked = True,T = False)
    bar(new_data,stacked = True,T = True)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 14:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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