君子好逑 发表于 2020-6-24 20:53:07

画图

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

BIO-张磊 发表于 2020-6-24 21:02:49

你要画成什么样的

liuzhengyuan 发表于 2020-6-24 21:05:33

pyecharts 和 matplotlib 都可以

君子好逑 发表于 2020-6-24 21:05:51

BIO-张磊 发表于 2020-6-24 21:02
你要画成什么样的

就是画成柱状图,横轴是类别:男和女,然后纵轴是满意不满意的人数

君子好逑 发表于 2020-6-24 21:07:36

liuzhengyuan 发表于 2020-6-24 21:05
pyecharts 和 matplotlib 都可以

呃,其实我想说大佬有类似案例的源程序吗{:10_266:}{:10_266:}{:10_266:}

liuzhengyuan 发表于 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

应该不太好理解,不知道有没有更好的教程

君子好逑 发表于 2020-6-24 21:11:22

liuzhengyuan 发表于 2020-6-24 21:09
没试过,不知道行不行
pyechats:https://www.jianshu.com/p/554d64470ec9
matplotlib:https://www.ji ...

谢谢大佬帮助{:10_297:}

liuzhengyuan 发表于 2020-6-24 21:13:36

本帖最后由 liuzhengyuan 于 2020-6-24 21:15 编辑

君子好逑 发表于 2020-6-24 21:11
谢谢大佬帮助

好像现在 pyecharts 语法变了,这个不管用了,不要意思,我再去研究研究

君子好逑 发表于 2020-6-24 21:17:16

liuzhengyuan 发表于 2020-6-24 21:13
好像现在 pyecharts 语法变了,这个不管用了,不要意思,我再去研究研究

大佬,你就像一道光照亮了我黑暗的课题{:10_254:}{:10_254:}{:10_254:}

liuzhengyuan 发表于 2020-6-24 21:19:42

君子好逑 发表于 2020-6-24 21:17
大佬,你就像一道光照亮了我黑暗的课题

其实尽管语法变了,但是代码执行完后,在同级目录下还会出现一个叫 xxx.html 的文件,打开就是图表了{:10_277:}

Twilight6 发表于 2020-6-24 21:22:22

话说你发的图片 和你的数据没有关联吧?日期呢? 你想把什么设为 x 轴 什么设为 y 轴?

Twilight6 发表于 2020-6-24 21:32:24

本帖最后由 Twilight6 于 2020-6-24 21:34 编辑





给你个模板:

import matplotlib.pyplot as plt

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

b_15 =
b_14 =

# 设置中文文字
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 =


# 设置条形图
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()

BIO-张磊 发表于 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_female = new_data == "女"]

male = list(new_data_male.value_counts())
female = list(new_data_female.value_counts())

plt.bar(,male,width = 0.2,edgecolor = "white")
plt.bar(,female,width = 0.2,edgecolor = "white")

sex = ["male","female"]

plt.xticks(,sex)
plt.show()
结果如下图,男女做横坐标轴,男/女的部分,分别是满意,勉强够用,不满意
https://xxx.ilovefishc.com/album/202006/24/215608k6xrnqf6b62w629a.png

君子好逑 发表于 2020-6-24 21:54:24

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

呃,大佬,我发的图片其实就是个样例,意思就是成果是跟图片上差不多的柱状图。然后数据的话其实是自选,横轴可以选男女或者是其他的比如职业类别,然后纵轴就可以选另一个,随便选两个做横轴纵轴就行,而我比较喜欢男女做横轴{:10_256:}{:10_256:}{:10_256:}

君子好逑 发表于 2020-6-24 21:58:09

BIO-张磊 发表于 2020-6-24 21:52


谢谢大佬,祝你明天出门就有艳遇,低头就能捡钱{:10_256:}{:10_256:}{:10_256:}

BIO-张磊 发表于 2020-6-24 21:59:00

君子好逑 发表于 2020-6-24 21:58
谢谢大佬,祝你明天出门就有艳遇,低头就能捡钱

这个如果不是你需要的图,那我也没办法了,我把效果图放在上面了

BIO-张磊 发表于 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_female = new_data == "女"]

male = list(new_data_male.value_counts())
female = list(new_data_female.value_counts())

plt.bar(,male,width = 0.2,edgecolor = "white",label='male')
plt.bar(,female,width = 0.2,edgecolor = "white",label='female')

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

plt.xticks(,result)
plt.legend()
plt.show()
https://xxx.ilovefishc.com/album/202006/24/222355mm39zkstkmll8xtk.png
我把代码略微改了以下,应该是你要的效果图了,不过这不是性别做横坐标轴,这叫性别作图例,下次用词准确

君子好逑 发表于 2020-6-25 11:44:21

BIO-张磊 发表于 2020-6-24 21:59
这个如果不是你需要的图,那我也没办法了,我把效果图放在上面了

稳大佬,差不多就是这个样子的

BIO-张磊 发表于 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]]
    #确定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 == i].iloc[:,1]).value_counts()).T
      data_i.index =
      new_data = pd.concat()
    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)
页: [1]
查看完整版本: 画图