专栏首页数据 学术 商业 新闻这些绘图细节(字体、线类型、标记等)让你的论文配图耳目一新

这些绘图细节(字体、线类型、标记等)让你的论文配图耳目一新

今天这篇推文,小编就对Python-matplotlib的一些基本绘图样式(字体、线类型、标记等)进行汇总统计,希望对小伙伴们有所帮助。主要内容如下:

  • matplotlib-字体属性(font properties)汇总
  • matplotlib-横线类型(line style)汇总
  • matplotlib-标记样式(Marker)汇总

matplotlib-Font Properties

这里对字体的操作只是对其斜体、粗字等属性的更改,主要从样式、粗细程度、大小。详细如下:

  • font-style:normal(正常), italic(斜体), oblique(倾斜的字体)
  • font-weight:light(细), normal(正常), medium(中等), semibold(半粗), bold(粗), heavy(特粗), black(黑)
  • font-size:xx-small(最小), x-small(较小), small(小), medium(正常(默认值)), large(大),x-large(较大), xx-large(最大)

下面小编通过可视化效果展示matplotlib的字体变化:

from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt

font0 = FontProperties()
alignment = {'horizontalalignment': 'center', 'verticalalignment': 'baseline'}

# 展示字体类型
styles = ['normal', 'italic', 'oblique']
t = plt.figtext(0.3, 0.9, 'style', fontproperties=font1, **alignment)

for k, style in enumerate(styles):
    font = font0.copy()
    font.set_family('sans-serif')
    font.set_style(style)
    t = plt.figtext(0.3, yp[k], style, fontproperties=font, **alignment)

# Show variant options
variants = ['normal', 'small-caps']

t = plt.figtext(0.5, 0.9, 'variant', fontproperties=font1, **alignment)

for k, variant in enumerate(variants):
    font = font0.copy()
    font.set_family('serif')
    font.set_variant(variant)
    t = plt.figtext(0.5, yp[k], variant, fontproperties=font, **alignment)

# 展示字体粗细
weights = ['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black']

t = plt.figtext(0.7, 0.9, 'weight', fontproperties=font1, **alignment)

for k, weight in enumerate(weights):
    font = font0.copy()
    font.set_weight(weight)
    t = plt.figtext(0.7, yp[k], weight, fontproperties=font, **alignment)

# 展示字体大小
sizes = ['xx-small', 'x-small', 'small', 'medium', 'large',
         'x-large', 'xx-large']

t = plt.figtext(0.9, 0.9, 'size', fontproperties=font1, **alignment)

for k, size in enumerate(sizes):
    font = font0.copy()
    font.set_size(size)
    t = plt.figtext(0.9, yp[k], size, fontproperties=font, **alignment)
plt.show()

Example Of matplotlib

更多详细内容可参考:Matplotlib font 样式[1]

matplotlib-Line Style

matplotlib中线样式 使用场景较多,例如绘制图表的网格线,一般选择虚线绘制。这里小编就汇总一下matplotlib中线的样式。

  • 「名称线类型(Named linestyles)」:主要包括:实线(solid,'-')、点线(dotted,'.')、短虚线(dashed,'--')、横点线(dashdot,'-.')。
  • 「参数线类型(Parametrized linestyles)」:该类型由于不常用,可通过以下代码展示:
import numpy as np
import matplotlib.pyplot as plt

linestyle_str = [
     ('solid', 'solid'),      # Same as (0, ()) or '-'
     ('dotted', 'dotted'),    # Same as (0, (1, 1)) or '.'
     ('dashed', 'dashed'),    # Same as '--'
     ('dashdot', 'dashdot')]  # Same as '-.'

linestyle_tuple = [
     ('loosely dotted',        (0, (1, 10))),
     ('dotted',                (0, (1, 1))),
     ('densely dotted',        (0, (1, 1))),

     ('loosely dashed',        (0, (5, 10))),
     ('dashed',                (0, (5, 5))),
     ('densely dashed',        (0, (5, 1))),

     ('loosely dashdotted',    (0, (3, 10, 1, 10))),
     ('dashdotted',            (0, (3, 5, 1, 5))),
     ('densely dashdotted',    (0, (3, 1, 1, 1))),

     ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
     ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
     ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))]


def plot_linestyles(ax, linestyles, title):
    X, Y = np.linspace(0, 100, 10), np.zeros(10)
    yticklabels = []

    for i, (name, linestyle) in enumerate(linestyles):
        ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')
        yticklabels.append(name)

    ax.set_title(title)
    ax.set(ylim=(-0.5, len(linestyles)-0.5),
           yticks=np.arange(len(linestyles)),
           yticklabels=yticklabels)
    ax.tick_params(left=False, bottom=False, labelbottom=False)
    for spine in ["left",'top',"right",'bottom']:
        #ax.spines[:].set_visible(False)
        ax.spines[spine].set_visible(False)

    # For each line style, add a text annotation with a small offset from
    # the reference point (0 in Axes coords, y tick value in Data coords).
    for i, (name, linestyle) in enumerate(linestyles):
        ax.annotate(repr(linestyle),
                    xy=(0.0, i), xycoords=ax.get_yaxis_transform(),
                    xytext=(-6, -12), textcoords='offset points',
                    color="blue", fontsize=8, ha="right", family="monospace")


ax0, ax1 = (plt.figure(figsize=(10, 8))
            .add_gridspec(2, 1, height_ratios=[1, 3])
            .subplots())

plot_linestyles(ax0, linestyle_str[::-1], title='Named linestyles')
plot_linestyles(ax1, linestyle_tuple[::-1], title='Parametrized linestyles')

plt.tight_layout()
plt.show()

Example Of matplotlib linstyles

更多详细内容可参考:Matplotlib 线类型[2]

matplotlib-Marker

matplotlib提供了多种marker类型用于绘制不同的图表类型,下面从Filled markers、Unfilled markers以及Marker fill styles 三种常用marker进行展示,详细如下:

「filled markers」:

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D


text_style = dict(horizontalalignment='right', verticalalignment='center',
                  fontsize=12, fontfamily='monospace')
marker_style = dict(linestyle=':', color='0.8', markersize=10,
                    markerfacecolor="#BC3C28", markeredgecolor="black")
                    
def format_axes(ax):
    ax.margins(0.2)
    ax.set_axis_off()
    ax.invert_yaxis()

def split_list(a_list):
    i_half = len(a_list) // 2
    return a_list[:i_half], a_list[i_half:]
    
##filled markers
fig, axs = plt.subplots(ncols=2,facecolor="white",figsize=(5,4),dpi=100)
fig.suptitle('Filled markers', fontsize=14)
for ax, markers in zip(axs, split_list(Line2D.filled_markers)):
    for y, marker in enumerate(markers):
        ax.text(-0.5, y, repr(marker), **text_style)
        ax.plot([y] * 3, marker=marker, **marker_style)
    format_axes(ax)
plt.show()

Example Of Matplotlib Filled markers

「Unfilled markers」:

fig, axs = plt.subplots(ncols=2,facecolor="white",figsize=(5,4),dpi=100)
fig.suptitle('Un-filled markers', fontsize=14)

# Filter out filled markers and marker settings that do nothing.
unfilled_markers = [m for m, func in Line2D.markers.items()
                    if func != 'nothing' and m not in Line2D.filled_markers]

for ax, markers in zip(axs, split_list(unfilled_markers)):
    for y, marker in enumerate(markers):
        ax.text(-0.5, y, repr(marker), **text_style)
        ax.plot([y] * 3, marker=marker, **marker_style)
    format_axes(ax)
plt.show()

Example Of Matplotlib Unfilled markers

「Marker fill styles」:

fig, ax = plt.subplots(facecolor="white",figsize=(6,4),dpi=100)
fig.suptitle('Marker fillstyle', fontsize=14)
fig.subplots_adjust(left=0.4)

filled_marker_style = dict(marker='o', linestyle=':', markersize=15,
                           color='#868686',
                           markerfacecolor='#EFC000',
                           markerfacecoloralt='lightsteelblue',
                           markeredgecolor='brown')

for y, fill_style in enumerate(Line2D.fillStyles):
    ax.text(-0.5, y, repr(fill_style), **text_style)
    ax.plot([y] * 3, fillstyle=fill_style, **filled_marker_style)
format_axes(ax)
plt.show()

Example Of Matplotlib Marker fill styles

以上就是小编对matplotlib marker的一个简单汇总,更多详细内容可参考:Matplotlib Marker介绍[3]

总结

这篇推文小编简单汇总了Python-matplotlib中字体属性(font properties)、线类型(line styles)、标记样式(Marker styles),当作自己的一个学习自留地,同时也希望能够帮助到需要的小伙伴,后期会不定期汇总这种常见易忘记的绘图技巧哈~

参考资料

[1]

Fonts demo: https://matplotlib.org/stable/gallery/text_labels_and_annotations/fonts_demo.html#sphx-glr-gallery-text-labels-and-annotations-fonts-demo-py。

[2]

Linestyles: https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html#sphx-glr-gallery-lines-bars-and-markers-linestyles-py。

[3]

Marker reference: https://matplotlib.org/stable/gallery/lines_bars_and_markers/marker_reference.html#sphx-glr-gallery-lines-bars-and-markers-marker-reference-py。

本文分享自微信公众号 - DataCharm(shujumeili),作者:宁俊骐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 这些绘图细节(字体、线类型、标记等)让你的论文配图耳目一新

    今天这篇推文,小编就对Python-matplotlib的一些基本绘图样式(字体、线类型、标记等)进行汇总统计,希望对小伙伴们有所帮助。主要内容如下:

    郭好奇同学
  • 你确定!?这些基础绘图技能你全都掌握了!?

    在介绍完这篇关于Python-Matplotlib基础绘图属性后(这些绘图细节(字体、线类型、标记等)让你的论文配图耳目一新),有很多小伙伴私信能不能详细介绍下...

    DataCharm
  • PS 2021融入AI新技术!用起来简单,几个键搞定老照片修复、变妆、绘画风格转换

    PS 2021中,新增的功能“神经滤镜” (Neural Filters)令人惊艳,将近期有意思的CV(计算机视觉)技术都收入其中。

    AI算法与图像处理
  • 网站推荐 (不定时更新)1.网页设计2.技术干货3.特别喜欢的几个网站4.其他网站

    Python cookbook:Python Cookbook,完全基于 Python 3,写的也很不错,中文版。

    Python攻城狮
  • 【谷歌草绘RNN瞄准超级AI】源自壁画的飞跃,AI 学会归纳抽象概念

    【新智元导读】人类自从开始在洞穴的岩壁上画出简单的草图,认知能力就产生了飞跃——归纳抽象的能力大大提高。现在,谷歌的 Magenta 项目也在致力于这一研究。名...

    新智元
  • 20秒画完小猪佩奇“社会人”,程序猿的手法是你想不到的独特

    今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。

    小小詹同学
  • 【图表大师一】如何让Excel图表更具“商务气质”?

    如何让Excel图表更具“商务气质”? 文/ExcelPro的图表博客 这是去年底的时候,应《电脑爱好者》杂志约稿写的一篇小文,内容大致是《图表之道》第1章的略...

    CDA数据分析师
  • AI假脸王生成!新一代GAN攻破几乎所有人脸识别系统,胜率95%

    2015年,现任教皇方济各 (Pope Francis) 访美,他是首次对美国进行正式访问的教皇,还将主持在美国领土上的首次封圣,并在国会发表演讲。时任美国总统...

    新智元
  • 【奇思妙想】20个从设计到功能都创意十足的小众网站

    现代生活节奏越来越快,工作压力也越来越大,不少设计师们在日复一日的重复工作中可能也会面临思维枯竭的困境。

    奔跑的小鹿
  • 如何消除用户疑虑,提升转化率?

    找到参照物和使用场景比数值精确更重要 之前网上选购台灯,台灯的设计、功能都挺满意的,但是有个问题让我停止了下单动作,如下图。 ? 因为这个台灯不能调整灯光亮度,...

    BestSDK
  • 定义可视化!用30分钟读懂人类感知世界的39项研究

    你想充分了解人类的感知世界吗?你对可视化是如何定义的呢?它是一门科学还是一门语言,那就请跟我们的作者一同走进这个世界,用短短的30分钟,看看39项关于人类感知的...

    大数据文摘
  • 论文绘图软件介绍

    众所周知,高水平的配图可以令论文、报告等显得耳目一新,瞬间提高一个档次。写文章、做报告,搞好配图已经成为了又一项标配技能。从大量的数据资料中获得所需的效果图,已...

    魏晓蕾
  • 灵活运用CSS开发技巧

    何为技巧,意指表现在文学、工艺、体育等方面的巧妙技能。代码作为一门现代高级工艺,推动着人类科学技术的发展,同时犹如文字一样承托着人类文化的进步。

    Nealyang
  • 618设计没想法?这波灵感解读拿走不谢!

    618作为电商活动一年中力度较大的一次,很多商家、平台、app都会不遗余力做一些活动,争取在下半年的各种大促打好前站、奠定好店铺的销售基础。作为设计师的我们,面...

    用户1730674
  • 数学之美——用Wolfram语言制作的3D打印珠宝

    我喜欢将数学概念转化为可穿戴的艺术作品。这就是我的企业Hanusa Design背后的想法。我制作独特的产品,这些产品的特点是以数学的美丽和精确为灵感的惊人设计...

    WolframChina
  • 用 Python 20 秒画完小猪佩奇“社会人”!附效果视频+完整代码

    导读:今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。

    华章科技
  • Godot3游戏引擎入门之六:制作TileMap瓦片地图

    2018-10-19 by Liuqingwen | Tags: Godot | Hits

    IT自学不成才
  • 七招打造有逼格的字体

    字体设计是一件非常有趣的事情,但是对于一些朋友来说面对字体设计时总有些小烦恼。所以今天和大家分享的更像是一个字体设计的“过程”,七种招式我们“刚柔并济”分为灵感...

    宇相
  • 网站性能优化实战——从12.67s到1.06s的故事

    ——本文是对之前同名文章的修正,将所有webpack3的内容更新为webpack4,以及加入了笔者近期在公司工作中学习到的自动化思想,对文章内容作了进一步提升。

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券