我有一个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相关问答推荐

在Python中管理打开对话框

在np数组上实现无重叠的二维滑动窗口

实现神经网络代码时的TypeError

Python列表不会在条件while循环中正确随机化'

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

在极中解析带有数字和SI前缀的字符串

Geopandas未返回正确的缓冲区(单位:米)

Flask Jinja2如果语句总是计算为false&

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

使用Python异步地持久跟踪用户输入

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

你能把函数的返回类型用作其他地方的类型吗?'

如何防止html代码出现在quarto gfm报告中的pandas表之上

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

将鼠标悬停在海运`pairplot`的批注/高亮显示上

将参数从另一个python脚本中传递给main(argv

判断字典中是否有多个值对

如何强制SqlalChemy指向与连接字符串的默认架构不同的架构

在Django管理后台保存模型时保存当前用户

在Polars中, Select 所有以Pattern结尾的列,并添加不带Pattern的新列