#python-3.x #matplotlib #scatter-plot #transpose
#python-3.x #matplotlib #график рассеяния #транспонировать
Вопрос:
У меня есть этот фрейм данных с 20 странами и данными за 20 лет
Country 2000 2001 2002 ...
USA 1 2 3
CANADA 4 5 6
SWEDEN 7 8 9
...
и я хочу получить новый df для создания точечного графика с y = значением для каждого столбца (страны) и x = года
Country USA CANADA SWEDEN ...
2000 1 4 7
2001 2 5 8
2002 3 6 9
...
Мой код :
data = pd.read_csv("data.csv")
data.set_index("Country Name", inplace = True)
data_transposed = data.T
Я изо всех сил пытаюсь создать такой график рассеяния.
Есть идеи?
Спасибо
Комментарии:
1. Точечный график — это график 1×1. Возьмите любые 2 столбца и попробуйте
df.plot.scatter(x,y)
Ответ №1:
Scatter — это график, который принимает только x и y, вы можете разбросать весь фрейм данных напрямую. Тем не менее, небольшое обходное решение:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(data={"Country":["USA", "Canada", "Brasil"], 2000:[1,4,7], 2001:[3,7,9], 2002: [2,8,5]})
for column in df.columns:
if column != "Country":
plt.scatter(x=df["Country"], y=df[column])
plt.show()
Результат:
Он просто отображает каждый столбец отдельно, в конечном итоге вы получаете то, что хотите. Как вы видите, каждый год представлен разными цветами — вы можете сделать наоборот (нанести годы и страны разными цветами). Разброс равен 1×1: у вас есть страна, год, значение. Вы можете представить только два из них на точечном графике (если, например, вы не используете цвета)
Для этого вам нужно транспонировать свой фрейм данных (поскольку вы сами указываете, что такое x и y), но вы можете сделать это с df.transpose()
помощью: см. Документацию .
Обратите внимание, что в моем df столбец country не является индексом. Вы можете использовать set_index
или reset_index
для управления им.