Ho cercato di utilizzare il testo di matplotlib o di annotare i moduli con caratteri cinesi mandarini. In qualche modo finisce per mostrare scatole. Qualche idea su questo?Come si usano i caratteri mandarin in matplotlib?
risposta
Ecco una soluzione che funziona per me su python27 e python33, utilizzando sia il testo che l'annotazione con il cinese.
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
fig = plt.figure()
ax = fig.add_subplot(111)
ChineseFont1 = FontProperties(fname = 'C:\\Windows\\Fonts\\simsun.ttc')
ChineseFont2 = FontProperties('SimHei')
ax.text(3, 2, u'我中文是写得到的', fontproperties = ChineseFont1)
ax.text(5, 1, u'我中文是写得到的', fontproperties = ChineseFont2)
ax.annotate(u'我中文是写得到的', xy=(2, 1), xytext=(3, 4),
arrowprops=dict(facecolor='black', shrink=0.05),
fontproperties = ChineseFont1)
ax.axis([0, 10, 0, 10])
plt.show()
ChineseFont1 è hardcoded a un file di font, mentre ChineseFont2 afferra un tipo di carattere in base al nome della famiglia (ma per ChineseFont2 ho dovuto provare un paio di trovare uno che avrebbe funzionato). Entrambi sono specifici per il mio sistema, in quanto fanno riferimento ai tipi di carattere che ho, quindi è molto probabile che dovrai cambiarli in riferimento ai tipi di carattere/percorsi sul tuo sistema.
Il carattere caricato per impostazione predefinita non sembra supportare i caratteri cinesi, quindi era principalmente un problema di scelta dei caratteri.
Un'altra soluzione è utilizzare il backend pgf
che utilizza XeTeX. Questo permette di utilizzare UTF-8 direttamente:
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
import matplotlib
matplotlib.use("pgf")
pgf_with_custom_preamble = {
# "font.size": 18,
"pgf.rcfonts": False,
"text.usetex": True,
"pgf.preamble": [
# math setup:
r"\usepackage{unicode-math}",
# fonts setup:
r"\setmainfont{WenQuanYi Zen Hei}",
r"\setsansfont{WenQuanYi Zen Hei}",
r"\setmonofont{WenQuanYi Zen Hei Mono}",
],
}
matplotlib.rcParams.update(pgf_with_custom_preamble)
from matplotlib import pyplot as plt
x = range(5)
y = range(5)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, label=u"我")
ax.legend(u"中")
ax.set_xlabel(u"是")
ax.set_ylabel(u"写")
ax.set_title(u"得")
ax.text(3, 2, u'到')
ax.annotate(u'的', xy=(2, 1), xytext=(3, 1),
arrowprops=dict(arrowstyle="<|-", connectionstyle="arc3", color='k'))
fig.savefig("pgf-mwe.png")
Risultato:
Questa soluzione richiede matplotlib 1.2+ e probabilmente XeTEX installati sul vostro sistema. Il modo più semplice per ottenere un XeTeX funzionante è utilizzare qualsiasi distribuzione LaTeX moderna: TeXLive (disponibile per tutte le piattaforme) o MiKTeX (solo Windows).
Quindi ho matplotlib 1.3.1, installato tex-latex-extra. Modificato os.path con quale lattice. Tuttavia l'errore che sto ottenendo ora è! Errore LaTeX: il file 'type1cm.sty 'non è stato trovato. – Tanmoy
Non sono sicuro che l'uso di 'pgf' sia strettamente necessario, penso che 'usetex = True' _should_ sia sufficiente, ma non ho font cinesi su questo computer con cui testare. – tacaswell
@Tanmoy: l'errore indica che non stavi davvero usando XeTeX. Il che significa che probabilmente non l'hai installato. Quale distro TeX stai usando? Quale sistema operativo? Il test facile è dove hai installato il file 'xelatex'. – Adobe
matplotlib.rc('font', family='Source Han Sans CN')
ax = quarterly_gdp.plot(title='国内生产总值')
è sufficiente l'installazione di carattere familiare della vostra matplotlib e dopo che è possibile tracciare con le etichette cinesi. Ho impostato il font come Source Han Sans CN, poiché è l'unico font disponibile sul mio computer per il cinese.
È possibile controllare il carattere disponibile tramite il comando fc-list :lang=zh
.
- 1. Come si usano i loop in TSQL?
- 2. Come si usano i CSS in Django?
- 3. Caratteri accentati in Matplotlib
- 4. Come si usano i joystick proxy ScalaMock?
- 5. Caratteri non ASCII in Matplotlib
- 6. Come si usano le spline in pythonOCC?
- 7. Come si limitano i caratteri in UITextView?
- 8. Come si usano numeri casuali in C#?
- 9. Come si usano i cookie su due domini diversi?
- 10. Come si usano i generici con una serie di Classi?
- 11. matplotlib: quando si usano append_axes, come posso indicare gli assi a cui voglio aggiungere il sottopannello?
- 12. Come si usano le classi di caratteri di Emacs in un'espressione regolare?
- 13. Come gestisci gli oggetti che si spostano tra i quad quando si usano i quadrifili?
- 14. Come si confrontano i tipi quando si usano i farmaci generici?
- 15. Posso caricare i caratteri di Google con Matplotlib e Jupyter?
- 16. Come si convertono i caratteri unicode in float in Python?
- 17. Quando si usano oggetti funzione in C++?
- 18. Quando si usano vararg in Java?
- 19. Come si usano le variabili di classe in Clamato?
- 20. differenza tbl_df e data.frame quando si usano i loop
- 21. Come si aggiungono i caratteri personalizzati in TCPDF?
- 22. Come si convertono i caratteri stringa in un elenco?
- 23. Come si rimuovono i caratteri ripetuti in una stringa
- 24. Come si usano le sezioni in app.config C# 4.0?
- 25. IndexOutofBounds quando si usano i byte letti di Java
- 26. Come riutilizzare i grafici in matplotlib?
- 27. Come mostrare i grafici matplotlib in python
- 28. Come si usano variabili globali o valori costanti in Ruby?
- 29. Come si usano più classi css in HAML?
- 30. Come si usano git worktrees in IntelliJ IDEA 2016.1?
Con l'utilizzo di ChineseFont2 viene visualizzato questo avviso "/usr/lib/pymodules/python2.7/matplotlib/font_manager.py:1236: UserWarning: findfont: famiglia di font ['SimHei'] non trovato. Ritorno a Bitstream Vera Sans ". @Charles ottieni gli stessi problemi? – Tanmoy
No, non mi dispiace, ho appena scelto un font sul mio sistema, nel mio caso SimHei. Semplicemente potresti non avere un font SimHei. Come accennato, ho provato alcuni caratteri dalla mia cartella dei font che non funzionava anche se ho font con quei nomi, quindi ho trovato SimHei e ha funzionato. In primo luogo, volevo solo dare un esempio che dimostri che il font può funzionare senza hardcoded. –
Sì, questo era il problema ... Non avevo il font SimHei ... Il più semplice era caricare i font da un PC Windows e poi spostarli sui miei font e collegarli come hai mostrato ... Grazie mille :) – Tanmoy