<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _altair_chart_num_(self, chart_type, xfield, yfield, opts, style2, encode):
 """ Get a chart + text number chart """

        style = {**style2}
        text_color = "grey"
        if "text_color" in style:
            text_color = style["text_color"]
            del style["text_color"]
            if "text_color" in self.chart_style:
                del self.chart_style["text_color"]
        if chart_type == "line":
            c = Chart(self.df).mark_line(**style).encode(x=xfield, \
                                                y=yfield, **encode).properties(**opts)
        elif chart_type == "bar":
            c = Chart(self.df).mark_bar(**style).encode(x=xfield, \
                                                y=yfield, **encode).properties(**opts)
        elif chart_type == "point":
            c = Chart(self.df).mark_point(**style).encode(x=xfield, \
                                                y=yfield, **encode).properties(**opts)
        encoder = encode
        if "text" not in encoder:
            encoder["text"] = yfield
        if "align" not in style:
            style["align"] = "center"
        if "dy" not in style:
            style["dy"] = -5
        if "dx" not in style and chart_type != "bar":
            style["dx"] = 8
        if "size" in style:
            del style["size"]
        style["color"] = text_color
        df2 = self.df.replace({yfield.split(":")[0]: {0: self.nan}})
        num = Chart(df2).mark_text(**style).encode(x=xfield, \
                                            y=yfield, **encoder).properties(**opts)
        return c + num