Heim  >  Artikel  >  Backend-Entwicklung  >  Teilen Sie eine interessante Python-Visualisierungstechnik

Teilen Sie eine interessante Python-Visualisierungstechnik

WBOY
WBOYnach vorne
2023-04-12 08:22:141649Durchsuche

Teilen Sie eine interessante Python-Visualisierungstechnik

Wie im Bild unten gezeigt:

Teilen Sie eine interessante Python-Visualisierungstechnik

Die Beispielfotos enthalten verschiedene Farben. Wir werden das Visualisierungsmodul und das OpenCV-Modul in Python verwenden, um alle Farbelemente im Bild zu identifizieren und zu konvertieren das Farbschema des Visualisierungsdiagramms.

Importieren Sie das Modul und laden Sie das Bild. Wie üblich besteht der erste Schritt darin, das Modul zu importieren. Das zur Visualisierung verwendete Modul ist das Matplotlib-Modul. Nachdem wir die Farben im Bild extrahiert haben, werden sie in der Farbzuordnung gespeichert Tabelle, also brauchen wir Bei Verwendung des Colormap-Moduls muss es auch importiert werden.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.image as mpimg
from PIL import Image
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import cv2
import extcolors
from colormap import rgb2hex

Dann laden wir zuerst das Bild. Der Code lautet wie folgt:

input_name = 'test_1.png'
img = plt.imread(input_name)
plt.imshow(img)
plt.axis('off')
plt.show()
output

Teilen Sie eine interessante Python-VisualisierungstechnikFarben extrahieren und in eine Tabelle integrieren

Wir rufen das Modul extcolors auf, um Farben aus dem Bild zu extrahieren, und das Ausgabeergebnis wird angezeigt in RGB-Form Farbe, der Code lautet wie folgt:

colors_x = extcolors.extract_from_path(img_url, tolerance=12, limit = 12)
colors_x

output

([((3, 107, 144), 180316),
 ((17, 129, 140), 139930),
 ((89, 126, 118), 134080),
 ((125, 148, 154), 20636),
 ((63, 112, 126), 18728),
 ((207, 220, 226), 11037),
 ((255, 255, 255), 7496),
 ((28, 80, 117), 4972),
 ((166, 191, 198), 4327),
 ((60, 150, 140), 4197),
 ((90, 94, 59), 3313),
 ((56, 66, 39), 1669)],
538200)

Wir integrieren die obigen Ergebnisse in einen DataFrame-Datensatz, der Code lautet wie folgt:

def color_to_df(input_color):
 colors_pre_list = str(input_color).replace('([(', '').split(', (')[0:-1]
 df_rgb = [i.split('), ')[0] + ')' for i in colors_pre_list]
 df_percent = [i.split('), ')[1].replace(')', '') for i in colors_pre_list]
 # 将RGB转换成十六进制的颜色
 df_color_up = [rgb2hex(int(i.split(", ")[0].replace("(", "")),
int(i.split(", ")[1]),
int(i.split(", ")[2].replace(")", ""))) for i in df_rgb]
 df = pd.DataFrame(zip(df_color_up, df_percent), columns=['c_code', 'occurence'])
 return df

Wir versuchen, unsere obige benutzerdefinierte Funktion aufzurufen und die Ergebnisse auszugeben zum DataFrame-Datensatz.

df_color = color_to_df(colors_x)
df_color

Ausgabe

Teilen Sie eine interessante Python-VisualisierungstechnikZeichnen des Diagramms

Der nächste Schritt besteht darin, das Diagramm zu zeichnen. Der Code lautet wie folgt:

fig, ax = plt.subplots(figsize=(90,90),dpi=10)
wedges, text = ax.pie(list_precent,
 labels= text_c,
 labeldistance= 1.05,
 colors = list_color,
 textprops={'fontsize': 120, 'color':'black'}
)
plt.setp(wedges, width=0.3)
ax.set_aspect("equal")
fig.set_facecolor('white')
plt.show()

Ausgabe

Teilen Sie eine interessante Python-Visualisierungstechnik wird aus dem Kreisdiagramm angezeigt Für den Anteil der einzelnen Farben gehen wir noch einen Schritt weiter und platzieren das Originalbild im Ring.

imagebox = OffsetImage(img, zoom=2.3)
ab = AnnotationBbox(imagebox, (0, 0))
ax1.add_artist(ab)

Ausgabe

Teilen Sie eine interessante Python-VisualisierungstechnikErstellen Sie abschließend eine Farbpalette, um alle verschiedenen Farben im Originalbild aufzulisten. Der Code lautet wie folgt:

## 调色盘
x_posi, y_posi, y_posi2 = 160, -170, -170
for c in list_color:
 if list_color.index(c) <= 5:
 y_posi += 180
 rect = patches.Rectangle((x_posi, y_posi), 360, 160, facecolor = c)
 ax2.add_patch(rect)
 ax2.text(x = x_posi+400, y = y_posi+100, s = c, fontdict={'fontsize': 190})
 else:
 y_posi2 += 180
 rect = patches.Rectangle((x_posi + 1000, y_posi2), 360, 160, facecolor = c)
 ax2.add_artist(rect)
 ax2.text(x = x_posi+1400, y = y_posi2+100, s = c, fontdict={'fontsize': 190})
ax2.axis('off')
fig.set_facecolor('white')
plt.imshow(bg)
plt.tight_layout()

Ausgabe

Teilen Sie eine interessante Python-VisualisierungstechnikPraktischer Link

Dieser Teil ist der praktische Teil Teil. Wir kapseln alle oben genannten Codes in eine vollständige Funktion.

def exact_color(input_image, resize, tolerance, zoom):
 output_width = resize
 img = Image.open(input_image)
 if img.size[0] >= resize:
 wpercent = (output_width/float(img.size[0]))
 hsize = int((float(img.size[1])*float(wpercent)))
 img = img.resize((output_width,hsize), Image.ANTIALIAS)
 resize_name = 'resize_'+ input_image
 img.save(resize_name)
 else:
 resize_name = input_image

 fig.set_facecolor('white')
 ax2.axis('off')
 bg = plt.imread('bg.png')
plt.imshow(bg)
 plt.tight_layout()
 return plt.show()

exact_color('test_2.png', 900, 12, 2.5)

Ausgabe

Teilen Sie eine interessante Python-Visualisierungstechnik

Das obige ist der detaillierte Inhalt vonTeilen Sie eine interessante Python-Visualisierungstechnik. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen