Python中基于字典绘制Matplotlib图表问题:自定义选两种货币绘图
解决Matplotlib基于汇率字典生成指定货币对比图表的问题
我来帮你搞定这个汇率图表的问题!你的现有代码存在几个关键问题,没法直接生成想要的两种货币对比图表:
- 直接使用
exchange_rates.values()会拿到嵌套字典,Matplotlib没法直接把这种数据绘制成柱状图 - 缺少选择指定两种货币的逻辑,原代码只是遍历了所有主货币
plt.xticks的代码不完整,没有正确获取主货币的标签
下面是完整的修正版代码,实现了选择任意两种货币生成对比柱状图的功能:
import matplotlib.pyplot as plt exchange_rates = { "GBP": { "USD": 1.2, "EUR": 1.1 }, "USD": { "GBP": 1.18, "EUR": 1.07 }, "CZK": { "GBP": 28.7934, "EUR": 29.654, "USD": 40.345 } } def make_a_graph(currency1, currency2): # 准备主货币列表作为x轴标签 base_currencies = list(exchange_rates.keys()) # 提取两种目标货币的汇率,缺失的汇率用None标记(可按需替换为0或其他值) rates1 = [exchange_rates[base].get(currency1, None) for base in base_currencies] rates2 = [exchange_rates[base].get(currency2, None) for base in base_currencies] # 设置柱状图宽度,避免两组柱子重叠 bar_width = 0.35 x = range(len(base_currencies)) # 绘制两组对比柱状图 plt.bar([i - bar_width/2 for i in x], rates1, width=bar_width, label=currency1) plt.bar([i + bar_width/2 for i in x], rates2, width=bar_width, label=currency2) # 配置图表基础元素 plt.xticks(x, base_currencies) plt.xlabel('Base Currency') plt.ylabel('Exchange Rate') plt.title(f'Comparison of {currency1} and {currency2} Exchange Rates') # 添加图例和辅助网格 plt.legend() plt.grid(axis='y', linestyle='--', alpha=0.7) # 展示图表 plt.show() # 测试:生成USD和GBP的汇率对比图表 make_a_graph("USD", "GBP")
代码说明:
- 函数
make_a_graph接受两个参数,就是你想要对比的两种货币代号 - 用
dict.get()方法安全获取汇率,避免因某个主货币没有对应汇率而报错 - 采用分组柱状图的形式,把两种货币的汇率并列展示,对比更直观
- 补充了完整的图表标签、标题、图例和网格,让图表可读性更强
如果某个主货币没有其中一种货币的汇率(比如原字典里GBP没有CZK的汇率),代码会用None标记,对应位置不会绘制柱子,你也可以把None替换为0或者其他占位值,根据需求调整。
内容的提问来源于stack exchange,提问作者Andrew Shakespeare
相关产品推荐
相关产品推荐

