How to display Chinese in pandas plot?

后端 未结 5 2149
轮回少年
轮回少年 2020-12-21 03:34

Here, I have a plot work to do with pandas, like this :

most_active_posts.plot(x = \'title\',y = \'active_span\',kind = \'barh\')

mos

相关标签:
5条回答
  • 2020-12-21 04:11

    My work-around is like this:

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm
    font = fm.FontProperties(fname='c:\\windows\\fonts\\simsun.ttc')  # speicify font
    ax = most_active_posts.plot(x = 'title',y = 'active_span',kind = 'barh')
    ax.set_xticklabels(most_active_posts['title'].str.decode('utf-8'), fontproperties=font)
    plt.show()
    

    Basically, you need to specify a valid font for Chinese characters.

    0 讨论(0)
  • 2020-12-21 04:15

    if you use pandas, you can use get_xticklabels to get labels and then set them with set_xticklabels.

    import matplotlib.font_manager as mfm
    import matplotlib.pyplot as plt
    
    font_path = "/System/Library/Fonts/STHeiti Light.ttc"
    prop = mfm.FontProperties(fname=font_path)
    df = pd.read_csv("data.txt"]
    figure, ax = plt.subplots(figsize=(12, 4))
    tmp = df.boxplot(by='shop', column='buy', ax=ax)
    ax.set_xticklabels(tmp.get_xticklabels(), fontproperties=prop)
    plt.show()
    
    0 讨论(0)
  • 2020-12-21 04:16

    I think you want the characters to be the labels on the plot right?

    I just grabbed some random characters:

    In [40]: df
    Out[40]: 
       0 title
    0  0     뉵
    1  1     뉑
    2  2     늘
    3  3     度
    
    [4 rows x 2 columns]
    

    I don't think there is a way to set y_ticklabels from df.plot(), but you can set them from the returned axes object:

    In [47]: ax = df.plot(kind='barh')
    
    In [48]: ax.set_yticklabels(df['title'].str.decode('utf-8'))
    Out[48]: 
    [<matplotlib.text.Text at 0x1152abfd0>,
     <matplotlib.text.Text at 0x1152a3910>,
     <matplotlib.text.Text at 0x111c5e790>,
     <matplotlib.text.Text at 0x111c5ef10>]
    
    In [49]: plt.draw()
    

    Here's the figure:

    enter image description here

    I'm not actually able to save the file and have the characters show up. Not sure why at the moment, but this may get you started.

    0 讨论(0)
  • I find a python library designed for fixing Chinese display in pip. You can download it using the command in your terminal:

    pip install pyplotz
    

    And you can write the following code instead(full code):

    from pyplotz.pyplotz import PyplotZ
    pltz = PyplotZ()
    pltz.enable_chinese()
    most_active_posts.plot(x='title',y='active_span',kind='bar')
    pltz.xticks(np.arange(len(df.cn)),df.cn,rotation=360)
    pltz.legend()
    pltz.show()
    

    The result is like this

    And it can help you handle matplotlib Chinese font for you! This is the github page:

    https://github.com/201528015329004/pyplotz

    And there are some handy examples:

    https://github.com/201528015329004/pyplotz/blob/master/examples/quick_start.ipynb

    0 讨论(0)
  • 2020-12-21 04:23
    1. Enter the directory Lib\site-packages\matplotlib\mpl-data, and edit the file matplotlibrc.
    2. Locate font.family and font.sans-serif then uncomment both of them and inset Microsoft YaHei after font.sans-serif.
    0 讨论(0)
提交回复
热议问题