酸酸酸359 2023-06-29 15:05 采纳率: 66.7%
浏览 18
已结题

python绘图无法修改字体


from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
from openpyxl import load_workbook
from matplotlib.collections import LineCollection
from IPython.core.interactiveshell import InteractiveShell


InteractiveShell.ast_node_interactivity = "all"

wb = load_workbook("Turkey_EA1977-2023_events.xlsx")  # Work Book
ws = wb.get_sheet_by_name('Turkey_EA1977-2023_events')  # Work Sheet

def get_marker_color(magnitude):
    # Returns green for small earthquakes, yellow for moderate
    #  earthquakes, and red for significant earthquakes.
    if magnitude < 5:
        return ('darkblue')
    elif magnitude < 12.5:
        return ('b')
    elif magnitude < 15:
        return ('royalblue')
    elif magnitude < 17.5:
        return ('deepskyblue')
    elif magnitude < 20:
        return ('cyan')
    elif magnitude < 22.5:
        return ('springgreen')
    elif magnitude < 25:
        return ('chartreuse')
    elif magnitude < 27.5:
        return ('yellowgreen')
    elif magnitude < 30:
        return ('goldenrod')
    elif magnitude < 35:
        return ('orange')
    elif magnitude < 37.5:
        return ('r')
    else:
        return ('darkred')

# make sure the value of resolution is a lowercase L,
#  for 'low', not a numeral 1
eq_map = Basemap(projection='merc', lat_0=40, lon_0=38.5,
    resolution = 'h', area_thresh = 0.1,
    llcrnrlon=34, llcrnrlat=35,
    urcrnrlon=47, urcrnrlat=41)
eq_map.drawcoastlines()
eq_map.drawcountries()
eq_map.fillcontinents(color='lightgrey')
eq_map.drawmapboundary()
eq_map.drawmeridians(np.arange(34, 47, 3),labels=[True,False,False,True])
eq_map.drawparallels(np.arange(35, 42, 1.5),labels=[True,False,False,True])


lons = []
lats = []
mag = []
dep = []
for i in range(2,260):
    lons.append(float(ws.cell(row=i, column=4).value))
    lats.append(float(ws.cell(row=i, column=3).value))
    mag.append(float(ws.cell(row=i, column=5).value))
    dep.append(float(ws.cell(row=i, column=6).value))

min_marker_size =2.5
for lon, lat, mag, dep in zip(lons, lats, mag, dep):
    x,y = eq_map(lon, lat)
    msize = mag ** min_marker_size
    marker_string = get_marker_color(dep)
    eq_map.scatter(x, y, marker='o', s=msize, c=dep, cmap='jet', vmin=10, vmax=50, alpha=0.75, edgecolor='black', linewidth=1)

'''
for i in range(33,43):
    lon=ws.cell(row=i, column=4).value
    lat=ws.cell(row=i, column=3).value
    my_map.plot(lon, lat, 'bo', markersize=12)
    print(lon, lat)
'''
cb = plt.colorbar(shrink=0.65)
cb.set_label('depth/km')

lon1=38
lat1=35.5
s1=4 ** min_marker_size
x1,y1 = eq_map(lon1, lat1)
lon2=38
lat2=35.5
s2=5 ** min_marker_size
x2,y2 = eq_map(lon2, lat2)
lon3=38
lat3=35.5
s3=6 ** min_marker_size
x3,y3 = eq_map(lon3, lat3)
lon4=38
lat4=35.5
s4=7 ** min_marker_size
x4,y4 = eq_map(lon4, lat4)
lon5=38
lat5=35.5
s5=8 ** min_marker_size
x5,y5 = eq_map(lon5, lat5)
p1 = eq_map.scatter(x=x1,y=y1,s=s1, c='lightgrey')
p2 = eq_map.scatter(x=x2,y=y2,s=s2, c='lightgrey')
p3 = eq_map.scatter(x=x3,y=y3,s=s3, c='lightgrey')
p4 = eq_map.scatter(x=x4,y=y4,s=s4, c='lightgrey')
p5 = eq_map.scatter(x=x5,y=y5,s=s5, c='lightgrey')
plt.legend([p1,p2,p3,p4,p5], ['4.0', '5.0', '6.0', '7.0', '8.0'],title = "Mw", loc='center left', bbox_to_anchor=(-0.05, 1.2),ncol=5)

plt.rcParams['figure.dpi'] = 900
#plt.legend(loc='lower left', shadow=True)
#handles, labels = scatter.legend_elements(prop="sizes", num=4, alpha=0.6)
plt.rcParams["font.family"] = "Times New Roman"
#print(plt.rcParams)
plt.show()

使用上述代码进行画图,明明把字体改成了Times New Roman 为什么运行出来的图字体没有变?

img

  • 写回答

3条回答 默认 最新

  • 大师兄6668 Python领域新星创作者 2023-06-29 15:20
    关注

    可以使用plt.rcParams["font.family"] = "Times New Roman"来指定字体为"Times New Roman"。这个语句会将 matplotlib 的全局字体设置更改为指定的字体。

    但需要注意的是,是否能生效取决于您的计算机上是否安装了 "Times New Roman" 字体。如果您的计算机上没有这个字体,那么这个设置将不会生效,并且 matplotlib 将会使用默认的字体进行显示。

    您可以先使用以下代码来检查您计算机上是否已安装 "Times New Roman" 字体:

    import matplotlib.font_manager as fm
    
    fonts = fm.findfont(fm.FontProperties(family="Times New Roman"))
    print(fonts)
    

    如果打印出的路径是有效的文件路径,则表示您的计算机上已安装该字体。如果打印为空或是 None,则表示未找到该字体。

    如果您的计算机上没有 "Times New Roman" 字体,您可以选择其他已安装的字体,或者考虑下载并安装 "Times New Roman" 字体,然后重试设置字体的代码。请注意,安装字体可能需要管理员权限。

    另外,如果您只是想在特定的图表中使用不同的字体,而不是全局更改字体,您可以通过设置每个特定的图表对象的字体属性来实现,例如:

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    ax.set_xlabel("X Label", fontname="Times New Roman")
    ax.set_ylabel("Y Label", fontname="Times New Roman")
    plt.show()
    

    这将仅在该图表中使用指定的字体。 你可以照着这个思路试试,排查一下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月8日
  • 已采纳回答 6月30日
  • 创建了问题 6月29日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据