python程序画漂亮图_用python画图代码:正弦图像、多轴图等案例

python画图

正弦图像:

#coding:utf-8

import numpy as np

import matplotlib.pyplot as plt

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

y=np.sin(x)

z=np.cos(x**2)

#控制图形的长和宽单位为英寸,

# 调用figure创建一个绘图对象,并且使它成为当前的绘图对象。

plt.figure(figsize=(8,4))

#$可以让字体变得跟好看

#给所绘制的曲线一个名字,此名字在图示(legend)中显示。

# 只要在字符串前后添加"$"符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。

#color : 指定曲线的颜色

#linewidth : 指定曲线的宽度

plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)

#b-- 曲线的颜色和线型

plt.plot(x,z,"b--",label="$cos(x^2)$")

#设置X轴的文字

plt.xlabel("Time(s)")

#设置Y轴的文字

plt.ylabel("Volt")

#设置图表的标题

plt.title("PyPlot First Example")

#设置Y轴的范围

plt.ylim(-1.2,1.2)

#显示图示

plt.legend()

#显示出我们创建的所有绘图对象。

plt.show()

879525-20170105151729612-976151561.png

配置

#coding:utf-8

import numpy as np

import matplotlib.pyplot as plt

x=np.arange(0,5,0.1)

## plot返回一个列表,通过line,获取其第一个元素

line,=plt.plot(x,x*x)

# 调用Line2D对象的set_*方法设置属性值 是否抗锯齿

line.set_antialiased(False)

# 同时绘制sin和cos两条曲线,lines是一个有两个Line2D对象的列表

lines = plt.plot(x, np.sin(x), x, np.cos(x))

## 调用setp函数同时配置多个Line2D对象的多个属性值

plt.setp(lines, color="r", linewidth=2.0)

plt.show()

879525-20170105154608441-1491338566.png

绘制多轴图

subplot(numRows, numCols, plotNum)

importmatplotlib.pyplot as plt

'''

subplot(numRows, numCols, plotNum)

numRows行 * numCols列个子区域

如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的

'''

for idx, color in enumerate("rgbyck"):

plt.subplot(330+idx+1, axisbg=color)

plt.show()

879525-20170105160439269-297115527.png

plt.subplot(221) #第一行的左图

plt.subplot(222) #第一行的右图

#第二行全占

plt.subplot(212) #第二整行

plt.show()

879525-20170105160457894-821502433.png

配置文件

>>> import matplotlib

>>> matplotlib.get_configdir()

'/Users/similarface/.matplotlib'

刻度定义:

copycode.gif

#coding:utf-8

import matplotlib.pyplot as pl from matplotlib.ticker import MultipleLocator, FuncFormatter import numpy as np x = np.arange(0, 4*np.pi, 0.01) y = np.sin(x) pl.figure(figsize=(8,4)) pl.plot(x, y) ax = pl.gca() def pi_formatter(x, pos): """ 比较罗嗦地将数值转换为以pi/4为单位的刻度文本 """ m = np.round(x / (np.pi/4)) n = 4

if m%2==0: m, n = m/2, n/2

if m%2==0: m, n = m/2, n/2

if m == 0: return "0"

if m == 1 and n == 1: return "$\pi$"

if n == 1: return r"$%d \pi$" % m if m == 1: return r"$\frac{\pi}{%d}$" % n return r"$\frac{%d \pi}{%d}$" % (m,n) # 设置两个坐标轴的范围

pl.ylim(-1.5,1.5) pl.xlim(0, np.max(x)) # 设置图的底边距

pl.subplots_adjust(bottom = 0.15) pl.grid() #开启网格 # 主刻度为pi/4

ax.xaxis.set_major_locator( MultipleLocator(np.pi/4) ) # 主刻度文本用pi_formatter函数计算

ax.xaxis.set_major_formatter( FuncFormatter( pi_formatter ) ) # 副刻度为pi/20

ax.xaxis.set_minor_locator( MultipleLocator(np.pi/20) ) # 设置刻度文本的大小

for tick in ax.xaxis.get_major_ticks(): tick.label1.set_fontsize(16) pl.show()

copycode.gif

879525-20170105161103659-1436480921.png

画点图

copycode.gif

import matplotlib.pyplot as plt from sklearn.datasets import load_boston X1 = load_boston()['data'][:, [8]] X2 = load_boston()['data'][:, [10]] plt.scatter(X1,X2, marker = 'o') plt.show()

copycode.gif

879525-20170105231314597-64472154.png

画三维图

copycode.gif

m=pd.read_csv(sportinte) x,y,z = m['ydra'],m['zyd'],m['rs12612420'] ax=plt.subplot(111,projection='3d') #创建一个三维的绘图工程

ax.scatter(x[:],y[:],z[:],c='r') #将数据点分成三部分画,在颜色上有区分度

plt.scatter(y,z, marker = 'o') ax.set_zlabel('rs12612420') #坐标轴

ax.set_ylabel(u'周运动') ax.set_xlabel(u'运动热爱') plt.show()

copycode.gif

879525-20170113104418525-1359044295.png

#散点柱状图

copycode.gif

#coding:utf-8 import numpy as np #pip install seaborn import seaborn as sns sns.set(style="whitegrid", color_codes=True) np.random.seed(sum(map(ord, "categorical"))) titanic = sns.load_dataset("titanic") tips = sns.load_dataset("tips") iris = sns.load_dataset("iris") #在带状图中,散点图通常会重叠。这使得很难看到数据的完全分布 sns.stripplot(x="day", y="total_bill", data=tips) sns.plt.show()

copycode.gif

879525-20170113145203400-186534944.png

#加入随机抖动”来调整位置 sns.stripplot(x="day", y="total_bill", data=tips, jitter=True);

879525-20170113145235666-1461908962.png

#避免重叠点

sns.swarmplot(x="day", y="total_bill", data=tips)

879525-20170113145707338-2020400185.png

#加入说明label

sns.swarmplot(x="day", y="total_bill", hue="sex", data=tips);

879525-20170113150004306-355846854.png

sportinte="/Users/similarface/Documents/sport耐力与爆发/sportinter.csv" m=pd.read_csv(sportinte) sns.swarmplot(x="ydra", y="zyd", hue="rs12612420", data=m); sns.plt.show()

879525-20170113150452260-1114692714.png

箱图

sportinte="/Users/similarface/Documents/sport耐力与爆发/sportinter.csv" m=pd.read_csv(sportinte) sns.boxplot(x="ydra", y="zyd", hue="rs12612420", data=m) sns.plt.show()

879525-20170113151111135-257720722.png

小提琴图

sportinte="/Users/similarface/Documents/sport耐力与爆发/sportinter.csv" m=pd.read_csv(sportinte) sns.violinplot(x="ydra", y="zyd", hue="rs12612420", data=m) sns.plt.show()

879525-20170113151336416-166021039.png

sportinte="/Users/similarface/Documents/sport耐力与爆发/sportinter.csv" m=pd.read_csv(sportinte) sns.violinplot(x="ydra", y="zyd", hue="rs12612420", data=m,bw=.1, scale="count", scale_hue=False) sns.plt.show()

879525-20170113151700494-249157316.png

sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True); sns.plt.show()

879525-20170113152047931-1098524154.png

#加入每个观测值

sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True, inner="stick", palette="Set3");

categorical_29_0.png

#加入点柱状图和小提琴图

sns.violinplot(x="day", y="total_bill", data=tips, inner=None) sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5);

879525-20170113152531431-584397770.png

柱状

sns.barplot(x="sex", y="survived", hue="class", data=titanic); sns.plt.show()

879525-20170113153528447-752190781.png

#count 计数图

sns.countplot(x="deck", data=titanic, palette="Greens_d"); sns.countplot(y="deck", hue="class", data=titanic, palette="Greens_d"); #泰坦尼克号获取与船舱等级

sns.pointplot(x="sex", y="survived", hue="class", data=titanic)

879525-20170113154132369-1811716242.png

sns.factorplot(x="time", y="total_bill", hue="smoker", col="day", data=tips, kind="box", size=4, aspect=.5); sns.plt.show()

879525-20170113154350947-1042794724.png

copycode.gif

g = sns.PairGrid(tips, x_vars=["smoker", "time", "sex"], y_vars=["total_bill", "tip"], aspect=.75, size=3.5) g.map(sns.violinplot, palette="pastel"); sns.plt.show()

copycode.gif

879525-20170113154530010-1409395318.png

#当有很多因素的时候怎么去看这些是否有潜在关系

import matplotlib.pyplot as plt import seaborn as sns _ = sns.pairplot(df[:50], vars=[1,2,3,4,5,6,7,8,9,10,11], hue="class", size=1) plt.show()

可以发现一些端倪

879525-20170116143207833-1042601903.png

ref:http://seaborn.pydata.org/tutorial/categorical.html

画饼图:

copycode.gif

#coding:utf-8 __author__ = 'similarface'

''' 耳垢项目 ''' import pandas as pd import seaborn as sns from scipy.stats import spearmanr meat_to_phenotypes = { 'Dry': 1, 'Wet': 0, 'Un': 2, } meat_to_genotype = { 'TT': 2, 'CT': 1, 'CC': 0, } filepath="/Users/similarface/Documents/phenotypes/耳垢/ergou20170121.txt" data=pd.read_csv(filepath,sep="\t") data['phenotypesid'] = data['phenotypes'].map(meat_to_phenotypes) data['genotypeid'] = data['genotype'].map(meat_to_genotype) ####################################################################################### #均线图 #剔除不清楚 ##### # data=data[data.phenotypesid!=2] # p=sns.pointplot(x="genotype", y='phenotypesid', data=data,markers="o") # p.axes.set_title(u"均线图[湿耳0干耳1]") ##### ####################################################################################### ####################################################################################### ##### #联结图 # p=sns.jointplot(x="genotypeid", y="phenotypesid", data=data,stat_func=spearmanr) ##### ####################################################################################### ####################################################################################### ##### # data=data[data.phenotypesid!=2] # sns.countplot(x="genotype", hue="phenotypes", data=data) #p.axes.set_title(u"柱状图[湿耳0干耳1]") ##### ####################################################################################### #sns.plt.show() ####################################################################################### ##### import matplotlib.pyplot as plt # data=data[data.phenotypesid!=2] plt.subplot(221) g=data.groupby(['phenotypes']) label_list=g.count().index plt.pie(g.count()['genotype'],labels=label_list,autopct="%1.1f%%") plt.title(u"问卷统计饼图(不含Unkown)") datag=data[data.genotype=='TT'] g=datag.groupby(['phenotypes']) label_list=g.count().index plt.subplot(222) plt.pie(g.count()['genotype'],labels=label_list,autopct="%1.1f%%") plt.title(u"耳垢TT") datag=data[data.genotype=='CT'] g=datag.groupby(['phenotypes']) label_list=g.count().index plt.subplot(223) plt.pie(g.count()['genotype'],labels=label_list,autopct="%1.1f%%") plt.title(u"耳垢CT") datag=data[data.genotype!='TT'] g=datag.groupby(['phenotypes']) label_list=g.count().index plt.subplot(224) plt.pie(g.count()['genotype'],labels=label_list,autopct="%1.1f%%") plt.title(u"耳垢!=TT") plt.show() ##### #######################################################################################

copycode.gif

879525-20170121143354812-1696748162.jpg

copycode.gif

#coding:utf-8

__author__ = 'similarface'

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np def fun(x,y): #return np.power(x,2)+np.power(y,2)

return 2*(x*0.8+y*0.1)*(x*0.2+y*0.9)*(x*0.3+y*0.7)*(x*0.3+y*0.7)*(x*0.4+y*0.7)*(x*0.4+y*0.7) def fun2(xx,yy): return xx fig1=plt.figure() ax=Axes3D(fig1) X=np.arange(0,1,0.01) Y=np.arange(0,1,0.01) XX=np.arange(0,1,0.01) YY=np.arange(1,0,-0.01) ZZ=np.arange(0,1,0.01) ZZ,ZZ=np.meshgrid(ZZ,ZZ) #ZZ=fun2(XX,YY)

X,Y=np.meshgrid(X,Y) Z=fun(X,Y) plt.title("This is main title") ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm) ax.plot_surface(XX, YY, ZZ, rstride=1, cstride=1, cmap=plt.cm.coolwarm) ax.set_xlabel(u'θ1', color='r') ax.set_ylabel(u'θ2', color='g') ax.set_zlabel('z label', color='b') plt.show()

copycode.gif

879525-20180420095353831-536768862.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Matplotlib 中绘制一个 y 轴在右侧的表,可以使用`matplotlib.pyplot.subplots()`函数创建一个包含两个坐标轴的图像,然后调用其中一个坐标轴的`ax.twinx()`方法来创建一个第二个独立的 y 轴。可以在第二个坐标轴上绘制数据,并使用`ax.set_ylabel()`方法为每个坐标轴设置标签。 以下是一个示例代码,展示了如何出 y 轴在右侧的表: ```python import matplotlib.pyplot as plt import numpy as np # 创建一个包含两个坐标轴的图像 fig, ax = plt.subplots() # 创建第二个独立的 y 轴 ax2 = ax.twinx() # 绘制数据到第一个 y 轴 x = np.arange(0, 10, 0.1) y1 = np.sin(x) ax.plot(x, y1, 'b-') # 绘制数据到第二个 y 轴 y2 = np.exp(x) ax2.plot(x, y2, 'r-') # 设置每个坐标轴的标签 ax.set_xlabel('x') ax.set_ylabel('sin(x)', color='b') ax2.set_ylabel('exp(x)', color='r') # 调整第一个 y 轴的标签位置 ax.tick_params(axis='y', labelcolor='b') ax.yaxis.labelpad = 20 # 显示表 plt.show() ``` 在这个示例中,`ax.twinx()`方法创建了一个第二个独立的 y 轴,它被分配给变量`ax2`。我们使用`ax.plot()`方法在第一个 y 轴上绘制一个蓝色的正弦曲线,使用`ax2.plot()`方法在第二个 y 轴上绘制一个红色的指数曲线。我们还使用`ax.set_ylabel()`和`ax2.set_ylabel()`方法为每个坐标轴设置标签,并使用`ax.tick_params()`方法调整第一个 y 轴的标签位置。 运行这个代码将会得到一个图像,其中正弦曲线在左侧 y 轴上绘制,指数曲线在右侧 y 轴上绘制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值