我有一个matplotlib的散点图,它使用了Pandas 数据框中的数据.我为我的 colored颜色 变量使用了一列int,但我不知道如何显示每种 colored颜色 的含义.如何提取 colored颜色 代码?

f_trains.plot.scatter("Latitude", "Longitude", color = f_trains['LstPrice'])

推荐答案

下面的方法应该是可行的.

在呼叫.plot.scatter()中:

  • 使用c=而不是color=来告诉matplotlib您要使用色彩映射
  • cmap=与matplotlib的colormaps中的一个一起使用来告诉您想要哪些 colored颜色 ;在色彩映射表中设置 colored颜色 的数量将给出一个带有分色的 colored颜色 条(而不是连续的 colored颜色 条)
  • 设置为colorbar=False,这样我们就可以单独创建 colored颜色 条
  • vmin=vmax=设置为最低和最高 colored颜色 ,并扩展一半;这将使刻度位置恰到好处地位于每种 colored颜色 的中心
  • 抓取ax = ....plot.scatter(...)输出的ax

然后,创建 colored颜色 条.它需要一个"标量可映射",这是存储散点及其 colored颜色 信息的matplotlib元素.在本例中,它存储在ax.collections[0]中.然后可以访问 colored颜色 栏来设置刻度及其标签.

以下是一些测试代码:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# a dummy dataframe for testing
f_trains = pd.DataFrame({"Latitude": np.random.normal(0.1, 1, 100).cumsum() + 5,
                         "Longitude": np.random.normal(0.1, 1, 100).cumsum() + 5,
                         "LstPrice": np.random.randint(1, 12, 100)
                         })

# suppose the correspondence between the integers and the labels is given in a dictionary
lstPrice_dict = {1: '1000-2000', 2: '2000-3000', 3: '3000-4000', 4: '4000-5000', 5: '5000-6000', 6: '6000-7000',
                 7: '7000-8000', 8: '8000-9000', 9: '9000-10000', 10: '10000-11000', 11: '11000-12000'}

num_colors = len(lstPrice_dict)
cmap = plt.get_cmap('RdYlBu', num_colors)
ax = f_trains.plot.scatter("Latitude", "Longitude", c=f_trains["LstPrice"], cmap=cmap,
                           vmin=min(lstPrice_dict.keys()) - 0.5, vmax=max(lstPrice_dict.keys()) + 0.5,
                           colorbar=False)
cbar = plt.colorbar(ax.collections[0], ax=ax)
cbar.set_ticks(list(lstPrice_dict.keys()))
cbar.set_ticklabels(lstPrice_dict.values())
cbar.ax.set_title("LstPrice", ha='left')

plt.tight_layout()
plt.show()

pandas scatterplot with colorbar legend

Python相关问答推荐

如何根据日期和时间将状态更新为已过期或活动?

使可滚动框架在tkinter环境中看起来自然

如何在polars(pythonapi)中解构嵌套 struct ?

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

运输问题分支定界法&

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

pandas:排序多级列

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

合并与拼接并举

导入错误:无法导入名称';操作';

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

使用tqdm的进度条

Tensorflow tokenizer问题.num_words到底做了什么?

Python日志(log)库如何有效地获取lineno和funcName?

Python:从目录内的文件导入目录

如何在Polars中创建条件增量列?

如何在Quarto中的标题页之前创建序言页

如何将验证器应用于PYDANC2中的EACHY_ITEM?