Python 在csv文件中使用熊猫时,如何更改不同数据类型的标记样式

Python 在csv文件中使用熊猫时,如何更改不同数据类型的标记样式,python,pandas,matplotlib,scatter-plot,Python,Pandas,Matplotlib,Scatter Plot,我有一个csv文件,其中包含100 GB位置的数据,列中有名称、人口、类型(城镇或城市)、纬度和经度。我在一张经纬度地图上绘制了它们,标记大小和人口成比例,颜色取决于国家。我正在努力寻找一种改变马克笔风格的方法。理想情况下,我希望城镇为^v,城市为v。这是到目前为止我的代码 # imports import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.patches as mp

我有一个csv文件,其中包含100 GB位置的数据,列中有名称、人口、类型(城镇或城市)、纬度和经度。我在一张经纬度地图上绘制了它们,标记大小和人口成比例,颜色取决于国家。我正在努力寻找一种改变马克笔风格的方法。理想情况下,我希望城镇为^v,城市为v。这是到目前为止我的代码

# imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

# import data file
# select data columns needed
data = pd.read_csv('GBplaces.csv', sep = ',', usecols = (0,1,2,3,4))
# name data columns
data.columns = ('Place','Type','Population','Latitude','Longitude')#



# make markers for towns and cities from different nations different colours
# Scotland in blue
data.loc[(data['Place'] == 'Aberdeen') | (data['Place'] == 'Dundee') | 
(data['Place'] == 'Glasgow') 
| (data['Place'] == 'Edinburgh'),'Colour'] = 'b'

# Wales in black
data.loc[(data['Place'] == 'Swansea') | (data['Place'] == 'Cardiff') | 
(data['Place'] == 'Newport'),'Colour'] = 'black'

# England in red
data.loc[(data['Place'] != 'Aberdeen') & (data['Place'] != 'Dundee') 
& (data['Place'] != 'Glasgow') & (data['Place'] != 'Edinburgh') 
& (data['Place'] != 'Swansea') & (data['Place'] != 'Cardiff') & 
(data['Place'] != 'Newport'),'Colour'] = 'r'

# legend created for colours for each nation
red_marker = mpatches.Patch(color='r',label='England')
blue_marker = mpatches.Patch(color='b', label='Scotland')
black_marker = mpatches.Patch(color='black', label='Wales')
legend = plt.legend(handles=[red_marker, blue_marker, black_marker])

# colour added to background
ax = plt.gca()
ax.patch.set_facecolor('#CCFFFF')

# make point size proportional to population
area = data['Population']/100000

plt.scatter(data['Longitude'], data['Latitude'], c = data['Colour'], s = 
area, )
到目前为止,我已经尝试以相同的方式改变标记样式,但这会导致一个空的图表。任何帮助都将不胜感激。

首先是一些虚拟数据:

df = pd.DataFrame(data={
    'Place': ['Scotland', 'Scotland', 'England', 'England', 'Wales', 'Wales'], 
    'x': [100, 90, 80, 70, 60, 50], 
    'y': [10, 20, 30, 40, 50, 60]
})
位置分组
,列出
标记
,然后循环浏览。在您的情况下,
地点将是城市或城镇

from itertools import cycle

ax = plt.gca()
ax.patch.set_facecolor('#FFFFFF')

places = df.groupby('Place')

markers = ['o', '1', ',']

legend_labels = []

for (name, place), marker in zip(places, cycle(markers)):

    ax.scatter(place.x, place.y, marker=marker)

    legend_labels.append(name)

ax.legend(labels=legend_labels)

plt.show()