dataframe实例可视化

drinks = pd.read_csv('drinks.csv', keep_default_na = False) 
# keep_default_na = True :将缺失值转换成NAN,False:是什么就读进来什么
drinks.info # 每列的具体信息
alcohol = pd.groupby(by = 'continent').sum()['total_values_of_pure_alcohol'] # 得到一个series
plt.bar(alcohol.index, alcohol, width=0.5)
# 或者Series中
alcohol.plot(kind='bar')
# dataframe中也可以画出来
df.plot(kind='bar') # 多列

# 在条形图上加曲线图
plt.bar(alcohol.index, alcohol, width=0.5)
plt.plot([0,1,2,3,4,5], alcohol, color='green')
# 如何在条形图上添加数字
plt.text(0,400,387.8) # 在(0,400)的位置上,添加387.8

# 练习:比较中国,美国,英国,俄罗斯 四个国家的白酒消耗量,绘制成柱状图
test = drinks[(drinks.country=='China')|(drinks.country=='USA') | (drinks.country=='United Kingdom') | (drinks.country=='Russia')]
test.spirt_servings.plot(kind='bar') # 发现,X轴不是国家,说明行索引不是国家
# 那我们重写
test.spirt_sverings.plot(kind='bar', tick_label = ['中国', '美国', '英国', '俄罗斯'])
# 发现上面还是显示不出来国家,那我们只能用plt了
plt.bar([1,2,3,4], test_spirt_servings, titick_label = ['中国', '美国', '英国', '俄罗斯'], 
width = 0.5) # 正确显示了

# bar是把你已经总结的数据呈现出来,用来对比各个组的数据
# hist是制作一个频率分布图,比如把一个数据等距分成10部分,每个部分的频率是多少,大概看一下分布
plt.hist(drinks.total_liters_of_pure_alcohol, bins = 20)
# 例如第一段是0-0.72,有32个国家在这个范围
# 也可以自己设置分割的距离
plt.hist(tips.total_bill, bins = [0,5,10,15,20,30])
# 显示概率值
plt.hist(tips.total_bill, bins = [0,5,10,15,20,30], density = True, color = 'red')
-----------------------------------------------------------------------------------------
# 散点图
plt.scatter([1,2,3,4], [1,2,3,4])
# = plt.plot([1,2,3,4], [1,2,3,4], '.')
# 假设四个点,改变点的颜色(渐变:c = [0,0,1,1])和大小(s = [100,200,300,400]) 
plt.scatter([1,2,3,4], [1,2,3,4], s = [100, 200, 300, 400], c = [0,0,1,1])
# cmap = 'rainbow' 彩虹颜色...

# 用总分来映射点的颜色,总分越高,点越大
plt.scatter(grade.英语, grade.数学, c = grade.总分, cmap = 'rainbow', s = grade.总分)

# 将男女用颜色分开
plt.scatter(tips.total_bill, tips.tip, s=100, c=(tips.sex=='Female').astype('int'), cmap='rainbow')
-----------------------------------------------------------------------------------------
# 饼状图
labels = ['吃饭', '交通', '游戏', '衣服']
data = [1000, 100, 500, 200]
plt.figure(figsize=(2,2). dpi=200)
plt.pie(data, labels = labels, exlode = (0,0,0.3,0), color = ['r', 'o', 'y', 'g'],
shadow = True, labeldistance=1.3, autopct='%1.1f%%') # 游戏突出显示30%,标签距离1.3,显示数据百分比(小数据点后一位)(%1.2f%%小数点2位)

# 还有箱型图....不说了,百度把
# 另外还有子图的画法

a1 = plt.subplot(221)
###
a2 = plt.subplot(222)
###
a3 = plt.subplot(223)
###
a4 = plt.subplot(224)

# 保存:
plt.save('hello.jpg', dpi = 200)

-----------------------------------------------------------------------------------------案例:绘制一个雅虎股票走势图
stock_data = pd.read_csv('yahoo_stock.csv')
stock_data.info()
stock_data.Date = pd.to_datetime(stock_data.Date)
# stock_date.Date = stock_data.Date.astype('int')
stock_data.info()
stock_data.sey_index('Date', inplace = True)
stock_data.sort_index(inplace=True) # 日期排序

plt.Figure()
plt.titile('雅虎历年股票走势图', fontsize=22)
plt.plot(stock_data.Open) # 查看Open的走势
plt.xlabel('日期', fontsize = 22)
plt.ylabel('价格', fontsize = 22)
plt.axhline(stock_data.Open[0], color='black', linewidth = 3, label='上市价格') # 画横线,给出纵坐标位置

plt.fill_between(x = stock_data.index, y1=stock_data.Open, y2=stock_data.Open[0],
where=stock_data.Open>stock_data.Open[0], color='red', alpha=0.5, label='增长部分')
# 根据y1和y2的分割线填充,位置where
plt.fill_between(x = stock_data.index, y1=stock_data.Open, y2=stock_data.Open[0],
where=stock_data.Open<stock_data.Open[0], color='red', alpha=0.5, label='破发部分')

# 画箭头需要给出文字的位置(箭头开始的位置),箭头结束的位置
plt.annotate('最高价:{}'.format(stock_data.Open.max()), {'2012-9-12', stock_data.Open.max()}, fontsize=24, xytext={80,400}, text_coords='figure points', arrowprops={"color":'red'})

plt.legend(fontsize=22, loc=2)
plt.savefig('yahoo_stock.jpg', dpi=200)

上一篇:php 解决超卖的几种方案(redis锁、mysql悲观锁)


下一篇:C++ 学习日志 --16