python 画图python可视化分析

matplotlib安装入门及基本图形绘制

2018-12-31  本文已影响0人  冷多多

    在 Python 中,将数据可视化有多种选择,matplotlib会很好上手。Matplotlib是一个Python 2维绘图库,已经成为python中公认的数据可视化工具,通过Matplotlib你可以很轻松地画一些或简单或复杂地图形,几行代码即可生成线图、直方图、功率谱、条形图、错误图、散点图等等。

对于一些简单的绘图,特别是与IPython结合使用时,pyplot模块提供了一个matlab接口。你可以通过面向对象的接口或通过一些MATLAB的函数来更改控制行样式、字体属性、轴属性等。

1.1安装:

1)linux系统

方法一:

sudo apt-get install python-dev

sudo apt-get install python-matplotlib

方法二:

pip install matplotlib

2)windows系统

先下载对应的安装包pyproj和matplotlib

打开Anaconda Prompt,输入安装包所在路径,然后分别输入

pip install pyproj 1.9.5.1 cp36 cp36m win_amd64.whl #输入下载的pyproj文件名

pip install matplotlib_tests‑2.1.0‑py2.py3‑none‑any.whl

3)mac os系统

方法一:

pip install matplotlib

方法二:

sudo curl -O https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

1.2快速入门

import numpy as np

import matplotlib.mlab as mlab

import matplotlib.pyplot as plt

#产生随机数

np.random.seed(19680801)

# 定义数据的分布特征

mu = 100 

sigma = 15 

x = mu + sigma * np.random.randn(437)

num_bins = 50

fig, ax = plt.subplots()

n, bins, patches = ax.hist(x, num_bins, normed=1)

# 添加图表元素

y = mlab.normpdf(bins, mu, sigma)

ax.plot(bins, y, '--')

ax.set_xlabel('Smarts')

ax.set_ylabel('Probability density')

ax.set_title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')

# 图片展示与保存

fig.tight_layout()

plt.savefig("Histogram.png")

plt.show()

1.3 matplotlib一些基本图形绘制

import matplotlib.pyplot as plt

import numpy as np

1、风格的设置

plt.style.available#查看所有风格

x = np.linspace(-10, 10)

y = np.sin(x)

plt.style.use('seaborn-notebook')

plt.plot(x, y)

plt.xkcd()

plt.plot(x, y)

2、条形图

np.random.seed(0)

x = np.arange(5)

y = np.random.randint(-5, 5, 5)

fig, axes = plt.subplots(ncols=2)

v_bars = axes[

0].bar(x, y, color='red')

h_bars = axes[1].barh(x, y)

axes[0].axhline(0, color='blue', linewidth=2)

axes[1].axvline(0, color='red', linewidth=2)

fig, ax = plt.subplots()

v_bars = ax.bar(x, y,color='lightblue')

for bar, height in zip(v_bars, y):

if height < 0:

        bar.set(edgecolor='darkred', color='lightgreen', linewidth=3)

x = np.random.randn(100)

x = x.cumsum()

y = np.linspace(0, 10, 100)

fig, ax = plt.subplots()

ax.fill_between(x, y,color='lightblue')

x = np.linspace(0, 10, 200)

y1 =2*x + 1

y2 = 3*x + 1.5

y_mean = 0.5*x*np.cos(2*x)+ 2.5 + 1

fig, ax = plt.subplots()

ax.fill_between(x, y1, y2,color='red')

ax.plot(x, y_mean,color='black')

mean_values = [1,2,3]

variance = [0.2, 0.4, 0.5]

bar_label = ['bar1', 'bar2', 'bar3']

x_pos =list(range(len(bar_label)))

plt.bar(x_pos, mean_values,

yerr=variance, alpha=0.3)#绘图x_pos为x轴,mean_values为y轴,alpha为透明度bar函数指定了条形图的x轴、y轴值,设置x轴刻度标签,条形图的色,同时设置透明度alpha;,plt.ylabel('variable y')#添加y轴标签

max_y =max(zip(mean_values, variance))

plt.ylim([0, (max_y[0] + max_y[1])*1.1])#设置Y轴刻度范围

plt.xticks(x_pos, bar_label)#添加x轴刻度标签

2、两组数据用条形图做对比

x1 = np.array([1,2,3])

x2 = np.array([2,2,3])

bar_labels = ['bar1', 'bar2', 'bar3']

# figsize参数:指定绘图对象的宽度width和高度height,单位为英寸;

# dpi

#参数指定绘图对象的分辨率;

#分辨率即每英寸是多少个像素,默认值为80

因此本代码中所创建的图表窗口的宽度为8*80=640像素fig = plt.figure(figsize=(8,6), dpi=80)

y_pos =list(np.arange(len(x1)))

plt.barh(y_pos, x1,color='g', alpha=0.5)

plt.barh(y_pos, -x2,color='b', alpha=0.5)

plt.xlim(max(x2)-1, max(x1)+1) 

3、三组数据用条形图做对比

green_data = [1,2,3]

blue_data = [3,2,1]

red_data = [2,3,3]

labels = ['group1', 'group2', 'group3']

pos =list(range(len(blue_data)))

width =0.2

fig, ax = plt.subplots(figsize=(8,6))

plt.bar(pos, green_data,width=width, alpha=0.5, color='g', label=labels[0])

plt.bar([p+widthfor p in pos], blue_data, width=width, alpha=0.5, color='b', label=labels[1])

plt.bar([p+2*width for p in pos], red_data, width=width, alpha=0.5, color='r', label=labels[2])

data = range(200, 225, 5)

bar_labels = ['a', 'b', 'c', 'd', 'e']

fig = plt.figure(figsize=(6,4))

y_pos = np.arange(len(data))

bars = plt.barh(y_pos, data,

alpha=0.5, color='g')

plt.yticks(y_pos, bar_labels,fontsize=16)

for b, d in zip(bars, data):

    plt.text(b.get_width() + b.get_width()*0.05, b.get_y() + b.get_height()/2, '%.2f' % (d/ min(data)))

3、条形图的颜色的选择

mean_values = range(10,18)

x_pos =range(len(mean_values))

import matplotlib.colors as col

import matplotlib.cm as cm

cmap1 = cm.ScalarMappable(col.Normalize(min(mean_values), max(mean_values), cm.hot))

cmap2 = cm.ScalarMappable(col.Normalize(0, 20, cm.BuGn))

plt.subplot(121)

plt.bar(x_pos, mean_values,

color=cmap1.to_rgba(mean_values))

plt.subplot(122)

plt.bar(x_pos, mean_values,color=cmap2.to_rgba(mean_values))

patterns = ('-', '+', 'x', '\\', '*', 'o', '0', '.')

fig = plt.gca()

mean_values =range(1, len(patterns) + 1)

x_pos =list(range(len(mean_values)))

bars = plt.bar(x_pos, mean_values)

for bar, pattern in zip(bars, patterns):

    bar.set_hatch(pattern)

4、饼图

1)格式

plt.pie(x, explode=None, labels=None, colors=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0,0), frame=False)

说明:

x: 指定绘图的数据

explode:指定饼图某些部分的突出显示,即呈现爆炸式

labels:为饼图添加标签说明,类似于图例说明

colors:指定饼图的填充色

autopct:设置百分比格式,如'%.1f%%'为保留一位小数

shadow:是否添加饼图的阴影效果

pctdistance:设置百分比标签与圆心的距离

labeldistance:设置各扇形标签(图例)与圆心的距离;

startangle:设置饼图的初始摆放角度, 180为水平;

radius:设置饼图的半径大小;

counterclock:是否让饼图按逆时针顺序呈现, True / False;

wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等, 如wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'}

textprops:设置饼图中文本的属性,如字体大小、颜色等;

center:指定饼图的中心点位置,默认为原点

frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;

2)示例

male = 43948

female = 23244

m_perc = male/(male+female)

f_perc = female/(male+female)

labels = ['男', '女']

colors = ['navy', 'lightcoral']

plt.figure(figsize=(10,10))

paches, texts, autotexts = plt.pie([m_perc, f_perc],

labels=labels, colors=colors, explode=[0,0.05], autopct='%0.1f%%')

for text in autotexts:

    text.set_color('white')

for text in texts+autotexts:

    text.set_fontsize(20)

5、箱图

1)格式

plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)

说明:

x:指定要绘制箱线图的数据;

notch:是否是凹口的形式展现箱线图,默认非凹口;

sym:指定异常点的形状,默认为+号显示;

vert:是否需要将箱线图垂直摆放,默认垂直摆放;

whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;

positions:指定箱线图的位置,默认为[0,1,2…];

widths:指定箱线图的宽度,默认为0.5;

patch_artist:是否填充箱体的颜色;

meanline:是否用线的形式表示均值,默认用点来表示;

showmeans:是否显示均值,默认不显示;

showcaps:是否显示箱线图顶端和末端的两条线,默认显示;

showbox:是否显示箱线图的箱体,默认显示;

showfliers:是否显示异常值,默认显示;

boxprops:设置箱体的属性,如边框色,填充色等;

labels:为箱线图添加标签,类似于图例的作用;

filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;

medianprops:设置中位数的属性,如线的类型、粗细等;

meanprops:设置均值的属性,如点的大小、颜色等;

capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;

whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

6、解决中文乱码问题

sans-serif就是无衬线字体,是一种通用字体族。常见的无衬线字体有 Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。

import matplotlib as mpl

mpl.rcParams[

'font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号

上一篇下一篇

猜你喜欢

热点阅读