作者ccwang002 (亮)
看板Python
标题Re: [问题] 关於用matplotlib如何把资料丢进图里
时间Tue Oct 28 21:41:36 2014
※ 引述《Nccu3631 (政大郑人维)》之铭言:
: 对於matplotlib
: 在网路上找了很久
: 觉得这个工具很不熟
: 关於现在的问题是
: 我有一笔资料 是关於 水果在那些市集有贩卖
: 而画了一个基本表格
: import numpy as np
: import matplotlib.pyplot as plt
: plt.title("Total fruit :%d " %kk)
: xticks = np.arange(20,140,20)
: yticks = np.arange(1, 11, 1)
matplotlib 画图的方式很原始,画长条图,你就要给它每个 bar 的位置与长度。
以你这边的给法,似乎是要画横的长条图,但又跟後面的语句有冲突。
简单一点就先假设是最常见的长条图:
y
| n
| n n
| n n
+--------- x
: 这是我所画的
: 想要丢的资料相当於一个list
: fruitlist=['apple':123 ,'banana':156,'orange':589,'blueberry':145,'cherry':23]
这个不是 list 喔,你的语法比较像 dict。
但直接用 dict 画图会无法保证每个水果出现的顺序(苹果不一定在香蕉前面)
这边推荐用 collections.OrderedDict。
# 我是注解
from collections import OrderedDict
import numpy as np
import matplotlib.pyplot as plt
my_fruits = OrderedDict([
('apple', 123), ('banana', 156), ('orange', 589),
('blueberry', 145), ('cherry', 23)
])
# 给定每个 bar 出现的 X 座标
# 通常间隔都一样,就让它出现在 x = 1, 2, ..., N
xticks = np.arange(len(my_fruits)) + 1
# 真正画长条图的函式 plt.bar(...)
# bar 座标 每个 bar 高度 置中表示第一个 bar 中央的座标是 (1, ...)
plt.bar(xticks, my_fruits.values(), align='center')
plt.xticks(xticks, list(my_fruits.keys()))
# 预设 X 座标数字,改显示水果名
plt.title("Total fruit: %d" % len(my_fruits))
# 给标题
plt.show()
# 秀出图。不一定需要,例如在 inline 模式就不需要
matplotlib 设计是仿 MATLAB 绘图方式,个人觉得非常底层,
虽然这让它画复杂的图时非常方便,但简单如长条图画起来都很罗嗦。
像 R 的 ggplot2 或它 Py ported 版本 ggplot 就好上手多了(被打)
横的长条图可以参考官网范例:
http://matplotlib.org/examples/lines_bars_and_markers/barh_demo.html
另外如果你有在用 pandas 处理表格类的数据的话
import pandas as pd
df = pd.DataFrame(list(my_fruits.items()), columns=['Fruit', 'Count'])
df.plot(kind='bar', x=0, title='My Fruits')
会是一样的效果~
--
PyCon APAC 2015 欢迎大家关注与加入!
http://tw.pycon.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 117.136.0.145
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1414503698.A.41A.html
※ 编辑: ccwang002 (117.136.0.145), 10/28/2014 21:56:06