1、不同自定义图例
# 导入对应的模块
from matplotlib import lines
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
# 1、定义线图例
# 方法1
line1 = lines.Line2D([0], [0], label='line1', marker='o', lw=2, c='green')
# 方法2,注意别丢逗号
line2, = plt.plot([0], [0], label='line2', marker='X', lw=2, c='blue')
# 2、定义矩形图例
path1 = mpatches.Patch(color="red", label="patch")
# 3、定义散点图图例
s1 = plt.scatter([0], [0], label='scatter', marker='+')
# 4、显示图例
handles = [line1, path1, line2, s1]
fig, ax = plt.subplots(figsize=(6.4, 0.32)) # 根据行数更改0.32
# ax.legend(handles=handles, labels=["a","b","c","d"], mode="expand", ncol = 4, borderaxespad = 0) # mode='expand', 水平展示图例
ax.legend(handles=handles, mode="expand", ncol = 4, borderaxespad = 0)
ax.axis("off") # 去掉坐标刻度
plt.show()
2、plt.legend() 参数
- loc:图例位置,可取(‘best’, ‘upper right’, ‘upper left’, ‘lower left’, ‘lower right’, ‘right’, ‘center left’, ‘center , right’, ‘lower center’, ‘upper center’, ‘center’) ;若是使用了bbox_to_anchor,则这项就无效了
- fontsize:int或float或{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’},字体大小;
- frameon:是否显示图例边框,
- ncol:图例的列的数量,默认为1,
- title:为图例添加标题
- shadow:是否为图例边框添加阴影,
- markerfirst:True表示图例标签在句柄右侧,false反之,
- markerscale:图例标记为原图标记中的多少倍大小,
- numpoints:表示图例中的句柄上的标记点的个数,一般设为1,
- fancybox:是否将图例框的边角设为圆形
- framealpha:控制图例框的透明度
- borderpad:图例框内边距
- labelspacing:图例中条目之间的距离
- columnspacing=0.4: 调整图例中不同列之间的间距
- labels= Label_Com:设置图例中的名称
- scatterpoints=1:设置图例中对应图像只出现一次
- handletextpad=0.1:用此参数调节图例和标签之间的距离
- handlelength:图例句柄的长度
- bbox_to_anchor:(横向看右num1,纵向看下num2),’num1’用于控制legend的左右移动,值越大,越向右边移动, ‘num2’用于控制legend的上下移动,值越大,越向上移动。如果要自定义图例位置或者将图例画在坐标外边,用它,比如bbox_to_anchor=(1.4,0.8),这个一般配合着 ax.get_position(), set_position([box.x0, box.y0, box.width*0.8 , box.height])使用。用不到的参数可以直接去掉,有的参数没写进去,用得到的话加进去 , bbox_to_anchor=(1.11,0)。如果使用ax.legend的话,需在它之前加一句:
ax = plt.gca() #返回坐标轴
plt.legend(scatterpoints=1,labels = Label_Com, labelspacing=0.4,columnspacing=0.4,markerscale=2,bbox_to_anchor=(0.9, 0),ncol=12,prop=font1,handletextpad=0.1)
3、组图共享图例
即先创建一个ax = plt.gca(),在ax的基础上操作即可创建组图的共享图例。
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
labels = ['winter', 'spring', 'summer', 'autumn']
color = ['lightskyblue', 'lime', 'red', 'gold']
patches = [mpatches.Patch(color=color[i], label="{:s}".format(labels[i])) for i in range(len(color))]
ax = plt.gca()
# 下面一行中bbox_to_anchor指定了legend的位置
ax.legend(handles=patches, bbox_to_anchor=(0.95, 1.12), ncol=4) # 生成legend
plt.show()
Original: https://blog.csdn.net/qq_45100200/article/details/126366182
Author: 清纯世纪
Title: plt自定义图例
相关阅读
Title: python中的merge函数_Python Merge函数原理及用法解析
Merge函数的用法jfz免费资源网
简单来说Merge函数相当于Excel中的vlookup函数。当我们对2个表进行数据合并的时候需要通过指定两个表中相同的列作为key,然后通过key匹配到其中要合并在一起的values值。jfz免费资源网
然后对于merge函数在Pandas中分为1vs1, 多(m)vs1,以及多(m)vs多(m)这三种场景。但是平时用的最多的往往是多vs1的这种场景。也就是说2个表中其中一个表作为key的值会出现重复,而另外一个表作为key的值则是唯一。jfz免费资源网
这种场景也很好理解。例如:我们在生产环境中对服务器进行管理,一台服务器上可能装了各种各样的软件。那么如果是Excel表格来管理的话一个软件就占用一行信息。而服务器名是相同的。所以一个相同的服务器名就会出现多个。jfz免费资源网
这台服务器上安装了多少个软件,服务器名就会重复几次,也就是最终有几行。那么另外一个表要想读取这台服务器上安装的所有软件,那么服务器名就要作为key,各个软件的信息则是value值。最终被读取写入的那张表的key只能唯一。jfz免费资源网
我们看下面这个案例,是真实多v1的案例。为了数据安全我只能把截图分享给大家,并把服务器名遮掩希望大家谅解。jfz免费资源网
数据表1:作为查询的总表,其中服务器名这列就是B列中的信息会出现重复jfz免费资源网
jfz免费资源网
数据表2:下表为按照表1的key就是hostname来匹配,匹配到后按照表2的列名来读取信息写入到表2.这里同上因为服务器名敏感,所以也用马赛克挡住了,忘谅解。jfz免费资源网
jfz免费资源网
代码演示:jfz免费资源网
- 读取表1,表2中的内容,作为DataFrame赋值给变量jfz免费资源网
%%
import pandas as pd
读取表1
df01 = pd.read_excel(“./datas/new_all_datas.xlsx”,
header=5)
df01.head()
%%
读取表2
df02 = pd.read_excel(“./datas/new_software_InputSheet.xlsx”)
df02
%%
- 通过merge函数合并两个DataFrame。on代表指明拿什么作为key来进行匹配。how这里分为left,right,inner,outer等方式。这里left代表按照表1为主表进行合并。jfz免费资源网
%%
ホスト名作为key来匹配两个表,相当于vlookup函数
how=left代表以left左表为主,这里则代表表二为左表
df03 = pd.merge(df02,df01,on=”ホスト名”,how=”left”)
df03
结果:合并结果如下。但是因为表1,表2中出现重复元素的列名,因此合并后Pandas会按照后缀,把相同列名按照_x,_y的方式生成多列。jfz免费资源网
jfz免费资源网
- 去除没用的列并按照条件查询想要的数据. 下列需求是按照服务器名,找出对应的”ソフトウェア名”也就是software名为Trend Micro的软件以及”ソフトウェア製造元”software制造商为Symantec的所有行。jfz免费资源网
%%
因为表中有相同的列名因此自动后缀被加上了_y
下面代表筛选查询范围,以及指定查询值
df03 = df03.loc[:,[“ホスト名”,”行番号”,”ソフトウェア区分_y”,”ソフトウェア名_y”,”ソフトウェアバージョン_y”,”ソフトウェア製造元_y”]]
df04 = df03[(df03[“ソフトウェア名_y”]==”Trend Micro”) | (df03[“ソフトウェア製造元_y”]==”Symantec”)]
重新把列名设定换一下然后输出
df04.columns = [“ホスト名”,”行番号”,”ソフトウェア区分”,”ソフトウェア名”,”ソフトウェアバージョン”,”ソフトウェア製造元”]
df04
结果:jfz免费资源网
jfz免费资源网
- 将数据导出到Excel文件jfz免费资源网
%%
with pd.ExcelWriter(“./datas/output_mergedatas.xlsx”) as writer:
df04.to_excel(writer,index=False)
print(“Done!!”)
结果:当然也可以直接导入到数据表2中去。我这里为了不破坏原表,因此作为新的Excel表导出了。jfz免费资源网
jfz免费资源网
大家在日常业务中,如果遇到类似场景可以尝试通过merge函数来合并您的数据。还可以结合loc切片以及写下来要发表的pivot,pivot_table透视表来更加丰富的对数据进行清洗。jfz免费资源网
总体而言用惯了Pandas后会感觉相比Excel中的函数及宏。Pandas会更加的灵活也更加的强大。jfz免费资源网
Original: https://blog.csdn.net/weixin_29156679/article/details/112942533
Author: 阿尔法老师
Title: python中的merge函数_Python Merge函数原理及用法解析
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/325064/
转载文章受原作者版权保护。转载请注明原作者出处!