각 데이터 점에 다른 텍스트가 있는 산점도
나는 산란도를 만들고 리스트에서 다른 숫자의 데이터 점에 주석을 달려고 한다.그래서 예를 들어, 나는 플롯을 하고 싶다.y
대x
그리고 해당 번호로 주석을 달았다.n
.
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')
좋은 생각 있어요?
배열이나 목록이 필요한 플롯 방법은 모르지만 사용할 수 있습니다.annotate()
의 값을 반복하면서n
.
import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
fig, ax = plt.subplots()
ax.scatter(z, y)
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
에는 많은 포맷 옵션이 있습니다.annotate()
matplotlib 웹사이트를 참조하십시오.
상기의 솔루션을 적용하려고 하는 사람이 있는 경우.scatter()
대신.subplot()
,
다음 코드를 실행해 보았습니다.
import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
fig, ax = plt.scatter(z, y)
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
그러나 "복제할 수 없는 PathCollection 개체를 풀었습니다"라는 오류가 코드라인 그림(ax = plt.collection(z, y)을 가리키고 있습니다.
나는 결국 다음 코드를 사용하여 오류를 해결했다.
import matplotlib.pyplot as plt
plt.scatter(z, y)
for i, txt in enumerate(n):
plt.annotate(txt, (z[i], y[i]))
이 두 가지 사이에 차이가 있을 줄은 몰랐습니다..scatter()
그리고..subplot()
이렇게 될 줄 알았어야 하는 건데.
matplotlib 2.0 이전 버전에서는ax.scatter
마커가 없는 텍스트 플롯에는 필요하지 않습니다.버전 2.0에서는ax.scatter
텍스트의 적절한 범위와 마커를 설정합니다.
import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
fig, ax = plt.subplots()
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
이 링크에서 3d의 예를 찾을 수 있습니다.
를 사용할 수도 있습니다.pyplot.text
(여기를 참조).
def plot_embeddings(M_reduced, word2Ind, words):
"""
Plot in a scatterplot the embeddings of the words specified in the list "words".
Include a label next to each point.
"""
for word in words:
x, y = M_reduced[word2Ind[word]]
plt.scatter(x, y, marker='x', color='red')
plt.text(x+.03, y+.03, word, fontsize=9)
plt.show()
M_reduced_plot_test = np.array([[1, 1], [-1, -1], [1, -1], [-1, 1], [0, 0]])
word2Ind_plot_test = {'test1': 0, 'test2': 1, 'test3': 2, 'test4': 3, 'test5': 4}
words = ['test1', 'test2', 'test3', 'test4', 'test5']
plot_embeddings(M_reduced_plot_test, word2Ind_plot_test, words)
화살표/텍스트 상자를 사용하여 라벨에 주석을 달 수도 있습니다.제 뜻은 다음과 같습니다.
import random
import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
fig, ax = plt.subplots()
ax.scatter(z, y)
ax.annotate(n[0], (z[0], y[0]), xytext=(z[0]+0.05, y[0]+0.3),
arrowprops=dict(facecolor='red', shrink=0.05))
ax.annotate(n[1], (z[1], y[1]), xytext=(z[1]-0.05, y[1]-0.3),
arrowprops = dict( arrowstyle="->",
connectionstyle="angle3,angleA=0,angleB=-90"))
ax.annotate(n[2], (z[2], y[2]), xytext=(z[2]-0.05, y[2]-0.3),
arrowprops = dict(arrowstyle="wedge,tail_width=0.5", alpha=0.1))
ax.annotate(n[3], (z[3], y[3]), xytext=(z[3]+0.05, y[3]-0.2),
arrowprops = dict(arrowstyle="fancy"))
ax.annotate(n[4], (z[4], y[4]), xytext=(z[4]-0.1, y[4]-0.2),
bbox=dict(boxstyle="round", alpha=0.1),
arrowprops = dict(arrowstyle="simple"))
plt.show()
그러면 다음 그래프가 생성됩니다.
제한된 값 집합의 경우 matplotlib이 좋습니다.그러나 값이 많으면 툴팁이 다른 데이터 포인트와 겹치기 시작합니다.그러나 공간이 한정되어 있기 때문에 값을 무시할 수 없습니다.따라서 축소 또는 확대하는 것이 좋습니다.
플롯리 사용
import plotly.express as px
df = px.data.tips()
df = px.data.gapminder().query("year==2007 and continent=='Americas'")
fig = px.scatter(df, x="gdpPercap", y="lifeExp", text="country", log_x=True, size_max=100, color="lifeExp")
fig.update_traces(textposition='top center')
fig.update_layout(title_text='Life Expectency', title_x=0.5)
fig.show()
Python 3.6+:
coordinates = [('a',1,2), ('b',3,4), ('c',5,6)]
for x in coordinates: plt.annotate(x[0], (x[1], x[2]))
목록 이해와 숫자를 사용하는 단일 라이너:
[ax.annotate(x[0], (x[1], x[2])) for x in np.array([n,z,y]).T]
셋업은 Rutger의 답변과 동일합니다.
이것은 다른 시간에 개별적으로 주석을 달아야 할 때 도움이 될 수 있습니다(즉, 단일 for 루프가 아닙니다).
ax = plt.gca()
ax.annotate('your_lable', (x,y))
어디에x
그리고.y
목표 좌표이며 유형은 float/int입니다.
언급URL : https://stackoverflow.com/questions/14432557/scatter-plot-with-different-text-at-each-data-point
'programing' 카테고리의 다른 글
Java를 사용하여 기본 웹 브라우저를 여는 방법 (0) | 2022.11.10 |
---|---|
PHP를 사용하여 문자열의 처음 4자 제거 (0) | 2022.11.10 |
무결성 제약 조건 위반: 1452 하위 행을 추가하거나 업데이트할 수 없습니다. (0) | 2022.11.10 |
MariaDB on Debian:구문 오류:unix 소켓 인증을 패스워드 베이스로 되돌리는 방법 (0) | 2022.11.10 |
bash에서 MySQL 명령을 실행하는 방법 (0) | 2022.11.10 |