Python seaborn matplotlib 对数据进行图表分析

matplotlib官网
基于matplotlib的seaborn官网

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline # notebook使用
import seaborn as sns  
sns.set_style("whitegrid") 
# 设置主题,可选项有darkgrid , whitegrid , dark , white ,和 ticks 
sns.set(style="dark", palette="muted", color_codes=True)    
# 通过参数设置主题

一、plt.hist

g = sns.FacetGrid(train_data, col='Survived')
# col,row,hue参数用于定义绘制数据的子集。由于survived有两个参数,会有两个图
g.map(plt.hist, 'Age', bins=20)
# hist直方图, ‘Age’为横坐标, bins绘制的直方数量
plt.show() #左图为在Survived=0的子集内,Age和数量的分布图。

这里写图片描述

grid = sns.FacetGrid(train_data, hue='Survived')
# hue参数的把两个直方图画在同一张图上,其中有size参数决定高度,aspect长宽比,width=size*aspect
grid.map(plt.hist, 'Age', alpha=0.5, bins=20)
grid.add_legend()
# 将hue标签显示在图上
plt.show()

这里写图片描述

#inter1_num为数值数组
plt.hist(inter1_num)
#对字符串数组画直方图
import pandas
from collections import Counter
a = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e']
letter_counts = Counter(a)
df = pandas.DataFrame.from_dict(letter_counts, orient='index')
df.plot(kind='bar')

二、pointplot

显示数据的均值和偏差

grid = sns.FacetGrid(train_data, row='Embarked', size=2.2, aspect=1.6)
grid.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', palette='deep')
# map函数将grid的子集应用于pointplot函数,其后面参数是pointplot的参数,分别为横坐标,纵坐标,hue。palette是调色板折线的颜色。
grid.add_legend()
plt.show()

这里写图片描述

sns.pointplot(x="Pclass", y="Survived", hue="Sex", data=data_train,palette={"male": "blue", "female": "pink"},markers=["*", "o"], linestyles=["-", "--"]);

这里写图片描述

import pandas as pd
import seaborn as sns
import matplotlib.ticker as ticker

name = '5.csv'
size = 15
linewidth = 1
marker_size = 40

plt.rcParams["axes.labelsize"] = size  # label大小
plt.rcParams["lines.linewidth"] = linewidth  # line大小
fig,a = plt.subplots(figsize=(10,4))
data = pd.read_csv(name)
data = data[data['epoch']<71]
ax = sns.pointplot(x="epoch", y="test-accuracy", hue="method", data=data,
              palette="deep",dodge=True, scale=0.5, markers=["o", "x", "^", "<"]);
ax.xaxis.set_major_locator(ticker.MultipleLocator(10)) #控制x轴单元距离
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
ax.set(ylim=(70,95))
plt.gca().legend().set_title('') #除掉legend标题
# plt.setp(ax.get_legend().get_texts(), fontsize=size) # 设置legend大小

for lh in plt.legend(fontsize=size).legendHandles:           # 设置marker大小
    lh.set_sizes([marker_size+20])
plt.setp(ax.collections, sizes=[marker_size])  # 设置legend marker大小
ax.tick_params(labelsize=size)  # 设置tick大小
# plt.ylabel('train-accuracy (%)')
ax.set(xlabel='迭代次数', ylabel='正确率/%')
plt.show()

fig.savefig(name+'.svg', format='svg', dpi=1200, bbox_inches='tight')

在这里插入图片描述

import matplotlib
matplotlib.use('Agg')
# mpl.rcParams['figure.dpi'] = 600
import matplotlib.pyplot as plt

%matplotlib inline
plt.style.use('seaborn-bright')
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['figure.figsize'] = 8, 8
# plt.rcParams['xtick.labelsize'] = 24
# plt.rcParams['ytick.labelsize'] = 24

tick_label_size = 14
label_size = 14

data_name = datatv
x_axis = [10, 72, 134, 196, 258, 320]
line1 = [0.8239, 
0.8315, 
0.8394, 
0.8350, #-0.8374-0.8372
0.8414, 
0.8418, 
]
line2 = [0.8211-0.006,
0.8168,
0.8218,
0.8143, #-0.8178
0.8177,
0.8171,
]
line3 = [0.8416,
0.8513,
0.8534,
0.8495, #-0.8520-0.8548
0.8536,
0.8567,
]
line4 = [0.8343,
0.8359,
0.8384,
0.8374, #-0.8392
0.8384,
0.8452,
]

xlim = (4, 326)
xticks = [10, 72, 134, 196, 258, 320]
xtickslabel = [10, 20, 40, 80, 160, 320]
xlabel = 'Number of hiddeng units'

ylim = (0.813, 0.858)
yticks = [0.82,0.83, 0.84, 0.85,]
ytickslabel = [0.82,0.83, 0.84, 0.85,  ]
ylabel = 'AUC(test)'


fig, ax = plt.subplots(1, 1)
ax.grid(color='gray', linestyle='--', linewidth=1, alpha=0.3)  
ax.set_facecolor('white')
ax.set_title(data_name)
# fig.suptitle(datael, fontsize=label_size)

ax.set_xlim(xlim[0], xlim[1])
ax.set_xticks(xticks)
ax.set_xticklabels(xtickslabel, fontsize=tick_label_size)
ax.set_xlabel(xlabel, fontsize=label_size)

ax.set_ylim(ylim)
ax.set_yticks(yticks)
ax.set_yticklabels(ytickslabel, fontsize=tick_label_size)
ax.set_ylabel(ylabel, fontsize=label_size)

ax.plot(x_axis, line1, 'bs--', markersize=9, linewidth=2, label=dcin_col)
ax.plot(x_axis, line2, 'g^--', markersize=10, linewidth=2, label=dcin_smi)
ax.plot(x_axis, line3, 'ro--', markersize=9, linewidth=2, label=dcin_col_app)
# ax.plot(x_axis, line4, 'cv--', markersize=10, linewidth=2, label=dcin_smi_app)

plt.legend(bbox_to_anchor=(0.89, 0.40), borderaxespad=0., fontsize=label_size, fancybox=False)
# plt.tight_layout(w_pad=-8)
# plt.savefig('test.jpg', bbox_inches='tight', dpi=200)

在这里插入图片描述

三、barplot

显示数据的均值和偏差

grid = sns.FacetGrid(train_data, col='Embarked', hue='Survived', palette={0: 'k', 1: 'w'})
grid.map(sns.barplot, 'Sex', 'Fare', alpha=.5)
#ci=sd表示用竖线显示标准偏差,=None不显示
grid.add_legend()
plt.show()

这里写图片描述

四、pairplot:

查看数据相关性。

_ = sns.pairplot(df[:50], vars=[8, 11, 12, 14, 19], hue="class", size=1.5)
# vars需绘制的列名,hue使用的是二分类的标记
# diag_kind="kde"能将对角线图换成kde

这里写图片描述
图中可以看出特征11和特征14几乎将分类目标class的分布线分了。而特质12和特征19负相关,特征14与特征19强相关,注意对有些模型(朴素贝叶斯分类器假设特征独立)会有影响。

五、corrplot:

主要用于分析特征的两两相关。

sns.pairplot(iris)

这里写图片描述
对角线为特征,左下角为相关性热点图,有上角为相关系数。

六、heatmap

主要用于分析特征的两两相关。

colormap = plt.cm.viridis
plt.figure(figsize=(12,12))
plt.title('Pearson Correlation of Features', y=1.05, size=15)
sns.heatmap(train.astype(float).corr(),linewidths=0.1,vmax=1.0, square=True, cmap=colormap, linecolor='white', annot=True)
# linewidths,linecolor划分线的宽度和颜色,annot是否在方格里注释数据,vmin, vmax相关度最大值和最小值,此处限制1.0最大,可见图中图谱最大为1.0

这里写图片描述

七、jointplot,scatter

查看数据分布和离群点

sns.jointplot(x="SepalLengthCm", y="SepalWidthCm", data=iris, size=5)

这里写图片描述
为了看到分类目标,使用:

sns.FacetGrid(iris, hue="Species", size=5) \
   .map(plt.scatter, "SepalLengthCm", "SepalWidthCm") \
   .add_legend()

这里写图片描述

# 可用于查看分布,离散点
plt.scatter(range(mergepred.shape[0]), np.sort(mergepred), color="red")

在这里插入图片描述

八、boxplot

分析单一特征。

sns.boxplot(x="Species", y="PetalLengthCm", data=iris)

这里写图片描述

ax = sns.boxplot(x="Species", y="PetalLengthCm", data=iris)
ax = sns.stripplot(x="Species", y="PetalLengthCm", data=iris, jitter=True, edgecolor="gray")
# jitter不让点分布在一条垂直线上

这里写图片描述

九、violinplot

类似于boxplot,分析单一变量。

sns.violinplot(x="Species", y="PetalLengthCm", data=iris, size=6)

这里写图片描述

十、kdeplot(核密度估计图)

分析单一变量。

sns.FacetGrid(iris, hue="Species", size=6) \
   .map(sns.kdeplot, "PetalLengthCm") \
   .add_legend()

这里写图片描述

	#直方图+核密度估计图
    sns.distplot(inter1_num)
    sns.distplot(Einter1_num)
    plt.show()
    #二维核密度估计图
    sns.kdeplot(inter1_num,Einter1_num,shade=True)
    plt.show()

在这里插入图片描述

十一、pandas画图

# Andrews Curves involve using attributes of samples as coefficients for Fourier series
# and then plotting these
from pandas.tools.plotting import andrews_curves
andrews_curves(iris.drop("Id", axis=1), "Species")

这里写图片描述

# 将特征作为横坐标,绘制每个样例取值
from pandas.tools.plotting import parallel_coordinates
parallel_coordinates(iris.drop("Id", axis=1), "Species")

这里写图片描述

将特征作为一个点绘制,通过相对权值将样例绘制成点。
from pandas.tools.plotting import radviz
radviz(iris.drop("Id", axis=1), "Species")

这里写图片描述

十二、WordCloud云图

用于分析文本中word出现的频率,越高,显示越大。

clean_mask=np.array(Image.open("../input/imagesforkernal/safe-zone.png"))
clean_mask=clean_mask[:,:,1]
#wordcloud for clean comments
subset=train[train.clean==True]
text=subset.comment_text.values
wc= WordCloud(background_color="black",max_words=2000,mask=clean_mask,stopwords=stopword)
wc.generate(" ".join(text))
plt.figure(figsize=(20,10))
plt.axis("off")
plt.title("Words frequented in Clean Comments", fontsize=20)
plt.imshow(wc.recolor(colormap= 'viridis' , random_state=17), alpha=0.98)
plt.show()

这里写图片描述

十三、折线图

plt.plot(inter1_num)

十四、画上文字,多张图

def showimg(im1,im2,match_rate):
    plt.figure(figsize=(5, 1))  # 设置图像大小
    plt.subplot(1, 3, 1)  # 在1*3图格的第1格画上下面图片
    plt.imshow(cv2.imread(im1)[: , : , : : -1])
    plt.subplot(1, 3, 2) # 在1*3图格的第2格画上下面图片
    plt.text(0.5, 0.5, match_rate, ha='center', va='center',) #画上文字
    plt.setp(plt.gca(), frame_on=False, xticks=(), yticks=()) #除去外框
    plt.subplot(1, 3, 3) # 在1*3图格的第3格画上下面图片
    plt.imshow(cv2.imread(im2)[: , : , : : -1])
    plt.show() # 显示

在这里插入图片描述

for qunum in range(500):
#     if random.random()>0.5:
#         continue
    scores, indexes = tree.kneighbors([query_fea[qunum]])
    scores, indexes = scores[0][::-1], indexes[0][::-1]
    print("query", query_cut[qunum])
    plt.figure(figsize=(20, 20))
    for ind, score in enumerate(scores):
        im = Image.open(image_dir+image_files[indexes[ind]]).resize((240,240))
        plt.subplot(1, 5, ind+1)
        plt.title(str(indexes[ind]) +"——"+ str(score))
        plt.imshow(im)
    plt.show()
    print()

在这里插入图片描述

十五、venn图

from matplotlib_venn import venn2,venn2_circles,venn3,venn3_circles
from matplotlib_venn import venn3_unweighted
venn3([label_set, image_set, text_set], ("label", "cnn", "bert"))

venn3_unweighted([merge_set, image_set, text_set], ("merge", "cnn", "bert"))

c = venn3_circles([merge_set, image_set, text_set], linewidth=1)
c[0].set_edgecolor('red')
c[1].set_edgecolor('blue')
c[1].set_edgecolor('green')

在这里插入图片描述

十六 目标检测BBOX绘制

import matplotlib.pyplot as plt
import matplotlib.patches as pt 
 
    num = 0
    for img_id,item in bbox.items():
        num += 1
        if(num>10):
            continue
        fig, ax = plt.subplots(1)
        img =  plt.imread(test_dir+img_dict[img_id])
        plt.imshow(img)
        for bb in item:
            xy = (bb["bbox"][0],bb["bbox"][1])
            p = pt.Rectangle(xy, bb["bbox"][2], bb["bbox"][3], fill=False, edgecolor = 'red',linewidth=1)
            ax.add_patch(p)
            ax.text(xy[0], xy[1],str(round(bb["score"],2))+"—"+str(bb["category_id"]),color="red")
        plt.show()
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值