programing

각 데이터 점에 다른 텍스트가 있는 산점도

goodsources 2022. 11. 10. 20:54
반응형

각 데이터 점에 다른 텍스트가 있는 산점도

나는 산란도를 만들고 리스트에서 다른 숫자의 데이터 점에 주석을 달려고 한다.그래서 예를 들어, 나는 플롯을 하고 싶다.yx그리고 해당 번호로 주석을 달았다.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

반응형