Skip to content
Snippets Groups Projects
Commit 3ba04215 authored by Roger Wolf's avatar Roger Wolf
Browse files

adding a new file as tool

parent 981ae6de
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id:83e1bf17-8b43-4cff-a92f-0089ca5f7e67 tags:
# Darstellung des Transistorkennlinienfelds
%% Cell type:markdown id:5b1cba86-fcfd-460e-97f3-2b12c992e3f6 tags:
Mit dem folgenden Code-Fragment erhalten Sie ein Template mit dem Sie das **Transistor Kennlinienfeld** mit Hilfe der Bibliothek *matplotlib* graphisch darstellen können.
%% Cell type:code id:b7c01ade-e0c4-430f-9f3d-c40aeb0debe3 tags:
``` python
import matplotlib.pyplot as plt
# Datenstruktur für die Ausgangskennlinien: Eine Liste von Drei-Tupeln für
# jeden gemessenen Basisstrom I_B. Jedes Tuple enthält I_B als ersten Eintrag,
# gefolgt von zwei Listen mit den Werten zu den Wertepaaren (U_CE, I_C).
# Eine typische Kurve für einen exemplarischen Wert von I_B ist gegeben.
# Tauschen Sie für Ihre Darstellung die angegebenen Beispielwerte aus
ausgangskennlinien = [
# I_B (mA), U_CE (V), I_C (mA)
(30,
# U_CE (V)
[0.1, 0.2, 0.3, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 3.0, 4.0, 5.0, 10.],
# I_C (mA)
[0.1, 0.6, 0.9, 1.5, 2.25, 3.0, 3.75, 4.5, 5.25, 6.0, 9.0, 12.0, 13., 15.]),
]
# Datenstruktur für die Eingangskennlinie: Hier gibt es nur eine Kennlinie. Die
# Struktur besteht aus einem Tuple aus zwei Listen mit Werten für die Wertepaare
# (U_BE, I_B)
eingangskennlinie = (
# I_B (muA)
[ 1., 2., 3., 4., 5., 6., 7., 10., 12.5, 15., 22.5, 30., 37.5, 42., 55., 75.],
# U_BE (V)
[0.1, 0.2, 0.3, 0.4, 0.5, 0.55, 0.6, 0.625, 0.65, 0.675, 0.725, 0.75, 0.775, 0.8, 0.82, 0.84])
# Datenstruktur für die Übertragungskennlinie: Hier gibt es nur eine Kennlinie.
# Die Struktur besteht aus einem Tuple aus zwei Listen mit Werten für die
# Wertepaare (I_B, I_C)
uebertragungskennlinie = (
# I_B (muA)
[5., 10., 20., 25., 30., 35., 40., 50.],
# I_C (mA)
[1., 2., 4., 4.8, 5.0, 5.2, 5.6, 6.5])
# Datenstruktur für die Übertragungskennlinie aus einer Anpassung die Daten.
# Zur Datenstruktur s.o.
fit_uebertragungskennlinie = (
# I_B (muA)
[5., 10., 20., 25., 30., 35., 40., 50.],
# I_C (mA)
[1., 2., 4., 4.8, 5.0, 5.2, 5.5, 6.5])
# Die folgenden Hilfsfunktionen entfernen das tick lable im gemeinsamen Ursprung
# des Diagramms. Von diesen Funktionen können Sie Gebrauch machen, wenn Sie
# möchten, es findet sich wieter unten jedoch eine alternative Vorgehensweise.
def axNoZero(ax, axis=("x", "y")):
"""
Entfernt das label für die 0 auf der angegebenen Achse
ax: matplotlib.pyplot.Axes - Achsen Objekt, bei dem die 0 entfernt werden soll
axis: Tuple[str] - Bezeichner der Achesn ("x", "y") für die die 0 entfernt werden soll
"""
if "x" in axis:
ax.xaxis.set_ticks(ax.get_xticks())
ax.set_xticklabels(ticklabelsRemoveZero(ax.get_xticklabels()))
if "y" in axis:
ax.yaxis.set_ticks(ax.get_yticks())
ax.set_yticklabels(ticklabelsRemoveZero(ax.get_yticklabels()))
def ticklabelsRemoveZero(labels):
"""
Setzt das label bei 0 auf einen leeren String
labels: List[matplotlib.text.Text] - Liste der Labels
returns List[matplotlib.text.Text] - Liste der Labels, bei denen das Label für 0 entfernt wurde
"""
for label in labels:
if label.get_position()[0] == 0:
label.set_text("")
break
return labels
# Defninition der drei Quadranten
fig = plt.figure(figsize=(10., 10.))
axUebertragungskennlinie = fig.add_axes([0.1, 0.5, 0.4, 0.4], zorder=2)
axEingangskennlinie = fig.add_axes([0.1, 0.1, 0.4, 0.4], sharex=axUebertragungskennlinie, zorder=1)
axAusgangskennlinie = fig.add_axes([0.5, 0.5, 0.4, 0.4], sharey=axUebertragungskennlinie, zorder=3)
# QUADANT I : Ausgangskennlinie
axAusgangskennlinie.minorticks_on()
# Darstellung der u.U. einzelnen Kennlinien mit entsprechendem label für I_B
for I_B, U_CE, I_C in ausgangskennlinien:
axAusgangskennlinie.plot(U_CE, I_C)
axAusgangskennlinie.annotate("${I_B:.1f}$".format(I_B=I_B), (U_CE[-1], I_C[-1]), textcoords="offset points", xytext=(5, 0), ha="left", va="center")
# Label für die angegebenen Zahlen für I_B
axAusgangskennlinie.text(1.02, 1.0, r"$I_{\mathrm{B}}\,/\,\mathrm{\mu\, A}$", transform=axAusgangskennlinie.transAxes, ha="left", va="bottom")
# x/y-Achsen labels
axAusgangskennlinie.set_xlabel(r"$U_\mathrm{CE}\,/\,\mathrm{V}$")
axAusgangskennlinie.set_ylabel(r"$I_\mathrm{C}\,/\,\mathrm{mA}$")
# x/y-Achsen limits
axAusgangskennlinie.set_xlim(0, 10.)
axAusgangskennlinie.set_ylim(0, 16.)
# Anpassen der label Koordinaten
axAusgangskennlinie.xaxis.set_label_coords(1.08, 0.1)
axAusgangskennlinie.xaxis.label.set_rotation(-90)
axAusgangskennlinie.yaxis.set_label_coords(0, 1.05)
axAusgangskennlinie.yaxis.label.set_rotation("horizontal")
# Ausblenden der ersten und letzten tick labels, die u.U. mit den Diagramm-
#genzen überlappen
plt.setp(axAusgangskennlinie.get_yticklabels()[ 0], visible=False)
plt.setp(axAusgangskennlinie.get_yticklabels()[-1], visible=False)
plt.setp(axAusgangskennlinie.get_xticklabels()[ 0], visible=False)
plt.setp(axAusgangskennlinie.get_xticklabels()[-1], visible=False)
#axNoZero(axAusgangskennlinie)
# Eingangskennlinie
axEingangskennlinie.minorticks_on()
axEingangskennlinie.plot(eingangskennlinie[0], eingangskennlinie[1])
axEingangskennlinie.set_ylabel(r"$U_\mathrm{BE}\,/\,\mathrm{V}$")
axEingangskennlinie.yaxis.set_label_coords(1, -0.05)
axEingangskennlinie.yaxis.label.set_rotation("horizontal")
axEingangskennlinie.set_ylim(0., 1.)
axEingangskennlinie.yaxis.reset_ticks()
axEingangskennlinie.xaxis.set_visible(False)
axEingangskennlinie.yaxis.set_inverted(True)
axEingangskennlinie.yaxis.tick_right()
axEingangskennlinie.yaxis.set_label_position("right")
plt.setp(axEingangskennlinie.get_yticklabels()[ 0], visible=False)
plt.setp(axEingangskennlinie.get_yticklabels()[-1], visible=False)
plt.setp(axEingangskennlinie.get_xticklabels()[ 0], visible=False)
plt.setp(axEingangskennlinie.get_xticklabels()[-1], visible=False)
#axNoZero(axEingangskennlinie, axis=("y",))
# Übertragungskennlinie
axUebertragungskennlinie.minorticks_on()
axUebertragungskennlinie.scatter(uebertragungskennlinie[0], uebertragungskennlinie[1], marker="x", color="red", zorder=2)
axUebertragungskennlinie.plot(fit_uebertragungskennlinie[0], fit_uebertragungskennlinie[1], color="black")
axUebertragungskennlinie.set_ylim(0)
axUebertragungskennlinie.set_xlim(0, 70)
axUebertragungskennlinie.set_xlabel(r"$I_\mathrm{B}\,/\,\mathrm{\mu \,A}$")
axUebertragungskennlinie.xaxis.set_label_coords(-0.08, 0.1)
axUebertragungskennlinie.xaxis.label.set_rotation("vertical")
axUebertragungskennlinie.yaxis.set_visible(False)
axUebertragungskennlinie.xaxis.set_inverted(True)
plt.setp(axUebertragungskennlinie.get_yticklabels()[ 0], visible=False)
plt.setp(axUebertragungskennlinie.get_yticklabels()[-1], visible=False)
plt.setp(axUebertragungskennlinie.get_xticklabels()[ 0], visible=False)
plt.setp(axUebertragungskennlinie.get_xticklabels()[-1], visible=False)
#axNoZero(axUebertragungskennlinie, axis=("x",))
# Zeige den plot an
plt.show()
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment