matplotlib画图之线条控制

今天由于论文数据分析需要,研究使用了matplotlib画图,现在详细记录一下期间遇到的问题以及解决方法。使用matplotlib画图时,需要区分不同的数据类型,首先想到的是使用不同颜色的线条进行区分。下面是不同颜色类型,效果如下图:

color类型

‘aliceblue’: ‘#F0F8FF’,
‘antiquewhite’: ‘#FAEBD7’,
‘aqua’: ‘#00FFFF’,
‘aquamarine’: ‘#7FFFD4’,
‘azure’: ‘#F0FFFF’,
‘beige’: ‘#F5F5DC’,
‘bisque’: ‘#FFE4C4’,
‘black’: ‘#000000’,
‘blanchedalmond’: ‘#FFEBCD’,
‘blue’: ‘#0000FF’,
‘blueviolet’: ‘#8A2BE2’,
‘brown’: ‘#A52A2A’,
‘burlywood’: ‘#DEB887’,
‘cadetblue’: ‘#5F9EA0’,
‘chartreuse’: ‘#7FFF00’,
‘chocolate’: ‘#D2691E’,
‘coral’: ‘#FF7F50’,
‘cornflowerblue’: ‘#6495ED’,
‘cornsilk’: ‘#FFF8DC’,
‘crimson’: ‘#DC143C’,
matplotlib画图之线条控制

linestyle类型

‘-’ solid line style
‘–’ dashed line style
‘-.’ dash-dot line style
‘:’ dotted line style

单纯的用颜色来区分效果不是很明显,于是想到在线段上做标记来区分,经过搜索使用marker类型来做标记。

marker类型

‘.’ point marker
‘,’ pixel marker
‘o’ circle marker
‘v’ triangle_down marker
‘^’ triangle_up marker
‘<’ triangle_left marker
‘>’ triangle_right marker
‘1’ tri_down marker
‘2’ tri_up marker
‘3’ tri_left marker
‘4’ tri_right marker
‘s’ square marker
‘p’ pentagon marker
‘*’ star marker
‘h’ hexagon1 marker
‘H’ hexagon2 marker
‘+’ plus marker
‘x’ x marker
‘D’ diamond marker
‘d’ thin_diamond marker
‘|’ vline marker
‘_’ hline marker
matplotlib画图之线条控制
结果由于数据量过大,导致marker点过于密集,于是又在网上找了半天,终于找到使用markevery变量来稀疏标记点的密集程度,最后效果图如下:
matplotlib画图之线条控制
最后效果还行,虽然看上去很简单,但是也是费了一些功夫的。最后贴个画CDF图核心代码,从读取csv文件到数据处理以及绘图过程。

cdf图核心代码部分

csvx_list = glob.glob('*.csv') #打开文件夹下全部的CSV文件
print('总共发现%s个CSV文件'% len(csvx_list))
for i in range(len(csvx_list)): #i既是正在处理的文件名
    csvfile = csv.reader(open(csvx_list[i], encoding='utf-8',errors='ignore'))
    a = []
    for s in csvfile:
        if csvfile.line_num == 1:
            continue
        a.append(float(s[0]))
    fs_xk = np.sort(a)
    val, cnt = np.unique(a, return_counts=True)
    ave = np.mean(a)
    # print(val,cnt)
    pmf1 = cnt / len(a)
    fs_rv_dist2 = stats.rv_discrete(name='fs_rv_dist2', values=(val, pmf1))
    plt.axis([0, np.exp(3), 0, 1])
    plt.plot(np.exp(val), fs_rv_dist2.cdf(val), color=colors[i], marker = markers[i],markevery=50,label=labels[i]+" average delay="+str('%.3f'%ave)+" ms",lw=1, alpha=0.5)

相关文章: