我有一个matplotlib
的散点图,它使用了Pandas 数据框中的数据.我为我的 colored颜色 变量使用了一列int
,但我不知道如何显示每种 colored颜色 的含义.如何提取 colored颜色 代码?
f_trains.plot.scatter("Latitude", "Longitude", color = f_trains['LstPrice'])
我有一个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()